2011-10-18 17 views
14

Tôi đang viết một kịch bản PowerShell mà sử dụng SharePoint 2010 New-SPWeb cmdlet để tạo ra các trang web được xác định bởi một tập tin Xml:có điều kiện xác định các thông số chuyển đổi trong 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> 

Các lệnh New-SPWeb có ba các thông số chuyển đổi:

  1. AddToQuickLaunch
  2. AddToTopNav
  3. UseParentTopNav

Tôi đang gặp khó khăn khi tìm ra cách chỉ đặt thông số chuyển đổi khi giá trị khớp trong Xml bằng 0 hoặc $ true.

Nó gần giống như tôi cần một số loại cú pháp inline-if khi gọi New-SPWeb để đặt ba tham số chuyển đổi.

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

Rất cám ơn!

+0

Wow! Tôi đang làm chính xác điều tương tự! Chỉ gần 2 năm sau – Andez

Trả lời

19

Tính $result ($true hoặc $false) trước:

$result = ... 

Và sử dụng nó sau:

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

Cảm ơn bạn, Roman. Tôi không biết cú pháp đó cho các tham số chuyển đổi. –

+0

Vâng, nó không phải là dễ dàng để khám phá ... Thời gian dài trước đây tôi đã có một vấn đề là tốt. –

+0

Cảm ơn vì điều đó ... Chỉ cần phát hiện ra trong powergui nếu bạn đặt dấu hai chấm sau một tham số, hàm intellisense cho bạn biết bạn có thể chỉ định $ true hoặc $ false – Andez

16

Có thêm một chiều. Bạn có thể sử dụng splatting như thế này:

$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 

Thông tin thêm về 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 để có tên mát mẻ như "Splatting" –

Các vấn đề liên quan