2011-10-18 4 views
14

Sto scrivendo uno script PowerShell che utilizza SharePoint 2010 New-SPWeb cmdlet per creare siti definiti da un file XML:specificando condizionale parametri dello switch in PowerShell

<?xml version="1.0" encoding="utf-8" ?> 
<siteStructure> 
    <site> 
    <url>Corporate</url> 
    <name>Corporate</name> 
    <language>1033</language> 
    <addToQuickLaunch>0</addToQuickLaunch> 
    <addToTopNav>0</addToTopNav> 
    <useParentTopNav>1</useParentTopNav> 
    </site> 
</siteStructure> 

Il cmdlet New-SPWeb ha tre parametri dello switch:

  1. AddToQuickLaunch
  2. AddToTopNav
  3. UseParentTopNav

Ho difficoltà a capire come impostare solo il parametro switch quando il valore corrispondente nell'Xml è 0 o $ true.

E 'quasi come se avessi bisogno una sorta di inline-se la sintassi quando si chiama New-SPWeb per impostare i tre parametri dello switch.

$siteStructureData = [xml](Get-Content .\Data-SiteStructure.xml) 

# find the template to use 
$webTemplate = Get-SPWebTemplate | Where {$_.Title -like $templateName } 

if ($webTemplate) 
{ 
    # iterate through and create sites 
    foreach ($siteToCreate in $siteStructureData.siteStructure.site) 
    { 
     "Creating site $webtitle at $URL/$webUrl" 

     # http://technet.microsoft.com/en-us/library/ff607579.aspx 
     New-SPWeb ` 
      -Url "$URL/$siteToCreate.url" ` 
      -Name $siteToCreate.name ` 
      -Template $webTemplate ` 
      -Language $siteToCreate.language 
      # set -AddToQuickLaunch 
      # set -AddToTopNav 
      # set -UseParentTopNav 
    } 
} 
else 
{ 
    throw ("Could not find template $templateName"); 
} 

Grazie mille!

+0

Wow! Sto facendo esattamente la stessa cosa! Solo quasi 2 anni dopo – Andez

risposta

19

calcolare il $result ($true o $false) prima:

$result = ... 

e usarlo dopo:

New-SPWeb ` 
-Url "$URL/$siteToCreate.url" ` 
-Name $siteToCreate.name ` 
-Template $webTemplate ` 
-Language $siteToCreate.language ` 
-AddToQuickLaunch:$result ` 
-AddToTopNav:$result ` 
-UseParentTopNav:$result 
+0

Grazie, Roman. Non ero a conoscenza di questa sintassi per i parametri dello switch. –

+0

Sì, non è facile da scoprire ... Molto tempo fa ho avuto un problema pure. –

+0

Grazie per questo ... appena scoperto in PowerGUI se si mette due punti dopo un parametro, l'intellisense ti consente di sapere è possibile specificare $ true o $ false – Andez

16

C'è un altro modo. È possibile utilizzare splatting come questo:

$params = @{ 
      Url = "$URL/$siteToCreate.url" 
      Name = $siteToCreate.name 
      Template = $webTemplate 
      Language = $siteToCreate.language } 
# if needed, add the keys to the hashtable 
if ($result) { 
    $params.AddToQuickLaunch = $true 
    $params.AddToTopNav = $true 
    $params.UseParentTopNav = $true 
} 
# now you just pass the parameters: 
New-SPWeb @params 

più su splatting:

What does the "@" symbol do in Powershell? http://blogs.msdn.com/b/powershell/archive/2009/01/02/how-and-why-to-use-splatting-passing-switch-parameters.aspx

+1

+1 per avere un nome fresco come "Splatting" –