【问题标题】:Conditionally specifying switch parameters in PowerShell在 PowerShell 中有条件地指定开关参数
【发布时间】:2011-12-10 03:06:06
【问题描述】:

我正在编写一个 PowerShell 脚本,它使用 SharePoint 2010 New-SPWeb cmdlet 创建由 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 cmdlet 具有三个开关参数:

  1. AddToQuickLaunch
  2. AddToTopNav
  3. UseParentTopNav

当 Xml 中的匹配值为 0 或 $true 时,我无法弄清楚如何仅设置 switch 参数。

在调用 New-SPWeb 设置三个开关参数时,我几乎需要某种 inline-if 语法。

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

非常感谢!

【问题讨论】:

  • 哇!我正在做同样的事情!仅仅过了将近 2 年

标签: powershell sharepoint-2010


【解决方案1】:

还有一种方法。你可以像这样使用喷溅:

$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

关于喷溅的更多信息:

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

【讨论】:

    【解决方案2】:

    计算之前的$result$true$false):

    $result = ...
    

    然后使用它:

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

    【讨论】:

    • 谢谢你,罗曼。我不知道开关参数的语法。
    • 是的,不容易发现……很久以前我也有问题。
    • 谢谢你...刚刚在powergui中发现如果你在参数后面加一个冒号,智能感知会让你知道你可以指定$true或$false
    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 2021-09-04
    • 2021-11-06
    • 2022-07-30
    • 2012-05-31
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多