2011-10-18 6 views
14

Estoy escribiendo un script de PowerShell que utiliza el SharePoint 2010 Nueva SPWeb cmdlet para crear sitios definidos por un archivo XML:condicional que especifican los parámetros del conmutador en 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> 

El cmdlet New-SPWeb tiene tres los parámetros del conmutador:

  1. AddToQuickLaunch
  2. AddToTopNav
  3. UseParentTopNav

Tengo problemas para descubrir cómo establecer solo el parámetro del interruptor cuando el valor coincidente en el Xml es 0 o $ true.

Es casi como si necesitara algún tipo de sintaxis en línea al llamar a New-SPWeb para configurar los tres parámetros del interruptor.

$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"); 
} 

¡Muchas gracias!

+0

Wow! ¡Estoy haciendo exactamente lo mismo! Solo casi 2 años después – Andez

Respuesta

19

Calcular el $result ($true o $false) antes:

$result = ... 

y utilizarlo después:

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

Gracias, Roman. No conocía esa sintaxis para los parámetros del interruptor. –

+0

Sí, no es fácil de descubrir ... Hace mucho tiempo tuve un problema también. –

+0

Gracias por eso ... Acabo de descubrir en powergui si le pones dos puntos después de un parámetro, el intellisense te deja saber que puedes especificar $ true o $ false – Andez

16

No es una forma más. Puede utilizar splatting así:

$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 

Más sobre 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 por tener un nombre genial como "Splatting" –

Cuestiones relacionadas