Подтвердить что ты не робот

Условное указание параметров переключателя в PowerShell

Я пишу PowerShell script, который использует командлет SharePoint 2010 Новый-SPWeb для создания сайтов, определенных в файле Xml:

<?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>

Командлет New-SPWeb имеет три параметра переключения:

  • AddToQuickLaunch
  • AddToTopNav
  • UseParentTopNav

У меня возникли проблемы с выяснением того, как установить параметр переключателя, только если значение соответствия в Xml равно 0 или $true.

Это почти так, как будто мне нужен какой-то встроенный синтаксис при вызове New-SPWeb для установки трех параметров переключателя.

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

Большое спасибо!

4b9b3361

Ответ 1

Рассчитайте $result ($true или $false) до:

$result = ...

И используйте его после:

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

Ответ 2

Есть еще один способ. Вы можете использовать splatting следующим образом:

$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

Подробнее о splatting:

Что означает "@" символ в Powershell? http://blogs.msdn.com/b/powershell/archive/2009/01/02/how-and-why-to-use-splatting-passing-switch-parameters.aspx