1

我發現this code在線,並想知道是否很容易轉換爲Powershell。我收到此錯誤是否容易轉換(約15行代碼)的C#代碼到Powershell

Missing expression after ','. 
At C:\AddaItem.ps1:60 char:73 
+   $newFile = $docLibrary.RootFolder.Files.Add($newDestinationFolderPath, <<<< 
UTF8Encoding.UTF8.GetBytes(builder.ToString()), $true) 
    + CategoryInfo   : ParserError: (,:String) [], ParseException 
    + FullyQualifiedErrorId : MissingExpressionAfterToken 

這似乎是在抱怨這一行:

$newFile = $docLibrary.RootFolder.Files.Add($newDestinationFolderPath,UTF8Encoding.UTF8.GetBytes(build 
er.ToString()), $true) 

這裏是整個代碼:

if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) 
{ 
    Add-PSSnapin Microsoft.SharePoint.PowerShell 
} 
$SiteUrl = "http://portal.memorial.hermann/patient" 
$web = Get-SPWeb $SiteUrl 
$Library = "Unpaid Billing Records" 
$docLibrary = $web.Lists[$Library] 
$rootFolder = $docLibrary.RootFolder 
$csvFile = "C:\\PowerShell\insurancefile.csv" 
# $fileURL 

foreach($i in Import-CSV $csvFile) 
{ 
    $sourceFile = Get-ChildItem $i.DocLink 
    $destinationFolderPath = $rootFolder.Url 
    if($i.DestinationFolder -ne ""){ 
     $destinationFolderPath += "/" + $i.DestinationFolder.replace("\","/") 

     $folders = $i.DestinationFolder.Split("\") 

     $subFolder = $rootFolder 
     foreach($f in $folders) 
     { 
      $testFolder = $subFolder.SubFolders[$f]; 
      if($testFolder -eq $null) 
      { 
       $subFolder = $subFolder.SubFolders.Add($f) 
       "created new folder " + $f 
      } 
      else 
      { 
       $subFolder = $testFolder 
      } 
     } 
    } 
    $destinationFolderPath += "/" + $sourceFile.Name 

    "copying " + $destinationFolderPath 
    if($i.ContentType = "MasterDocument") 
    { 
     $itemType = $docLibrary.ContentTypes[$i.ContentType] 
     $newFile = $docLibrary.RootFolder.Files.Add($destinationFolderPath,$sourceFile.OpenRead(), $true) 
     $theItem = $newFile.Item 
     $theItem["ContentTypeId"] = $itemType.Id 
     # $fileURL = $theItem.Url 
    } 
    elseif($i.ContentType = "Link2Document") 
    { 
     $itemType = $docLibrary.ContentTypes[$i.ContentType] 
     $newDestinationFolderPath = "/" + $i.fileNameASPX 
     $newFile = $docLibrary.RootFolder.Files.Add($newDestinationFolderPath,UTF8Encoding.UTF8.GetBytes(builder.ToString()), $true)  
     $theItem = $newFile.Item 
     $theItem["ContentTypeId"] = $itemType.Id 
     $itemUrl = New-object Microsoft.SharePoint.SPFieldUrlValue  
     $itemUrl.Url = $i.fileLinkUrl 
     $itemUrl.Descrition = $i.URLDESC 
     $theItem["URL"] = $itemUrl  
    } 

    # UPDATING METADATA 
    # $theItem["Name"] = $i.newfilename #Rename file name 
    $theItem["Status"] = $i.Status 
    $theItem["Title"] = $i.Title 
    $theItem["Grantor"] = $i.Grantor 

    $theItem.Update() 
} 

$web.Dispose() 

僅供參考,這裏的C#代碼我試圖轉換:

using (SPSite siteCollection = new SPSite("http://moss.litwareinc.com")) { 
    using (SPWeb web = siteCollection.OpenWeb("docs")) { 
     SPList list = web.Lists["Sample"]; 

     //link to the file 
     string fileLinkUrl = "http://moss.litwareinc.com/docs/Shared%20Documents/ConfigureIRMinWSS30.doc"; 

     StringBuilder builder = new StringBuilder(); 

     using (TextReader reader = new StreamReader(@"C:\linktodocumenttemplate.txt")) { 
      builder.Append(reader.ReadToEnd()); 
     } 

     //replace string template with values 
     builder.Replace("{0}", fileLinkUrl); 

     //should change the name of the .aspx file per item 
     SPFile file = list.RootFolder.Files.Add("link_title.aspx", UTF8Encoding.UTF8.GetBytes(builder.ToString())); 

     //set list item properties 
     SPListItem item = file.Item; 
     item["Content Type"] = "Link to a Document"; 
     SPFieldUrlValue itemUrl = new SPFieldUrlValue(); 
     itemUrl.Description = "From sample code"; 
     itemUrl.Url = fileLinkUrl; 
     item["URL"] = itemUrl; 
     //persist changes 
     item.Update(); 
    } 
} 
+0

請花時間解釋「不工作」以及您需要幫助的具體內容。 –

+0

對不起,我完全忘記了添加錯誤。我更新了這篇文章。 – user1497590

+0

這樣比較好,但也請包含* powershell *代碼。 –

回答

1

這應該解決您遇到的錯誤:

$content = get-content "C:\linktodocumenttemplate.txt" 
$utf = new-object System.Text.UTF8Encoding 
$newFile = $docLibrary.RootFolder.Files.Add($newDestinationFolderPath, $utf.GetBytes($content.ToString()), $true) 
+0

非常感謝您的幫助。 – user1497590