-2

ファイルのリストを循環して名前を変更する次のpowershellスクリプトがあります。エラー処理をいくつか紹介したいのですが、どこから始めればよいかわかりません。

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

$Url = "https://....."
$UrlSub = "docs"
$FullPath = $Url + $UrlSub
$destinationFolder = "c:\022713\"
$sourceCsv = "c:\filename.CSV"

$Site = New-Object -TypeName Microsoft.SharePoint.SPSite $Url 
$web =  $Site.OpenWeb($UrlSub)
$fileObjects = Import-CSV $sourceCsv 

ForEach ($fileObject in $fileObjects) 
{
    $fileUrl = $fileObject.DOC_FILENAME.replace($Url,"")
    $file = $web.GetFile($FullPath)
        $binary = $file.OpenBinary()

    $dateTimeStamp = Get-Date -format s
    $newFileName = $fileObject.DocumentType + "_" + $fileObject.SAPObjectNumber + "_" + $dateTimeStamp.replace(":","").replace("-","")
    $extension = [System.IO.Path]::GetExtension($file.Name)

    $stream = New-Object System.IO.FileStream(($destinationfolder + $newFileName + $extension), [System.IO.FileMode]::Create)
    $writer = New-Object System.IO.BinaryWriter($stream)
    $writer.write($binary)
    $writer.Close()
}
$web.Dispose()
4

1 に答える 1

1

ここで仕事をすることはあまりありません。コードで何が問題になる可能性があるかを理解し、ex を使用してそれらを処理する必要があります。ブロックまたはトラップを試行/キャッチします。

元。filestream宛先ファイルを作成/上書きするアクセス権がない場合、コンストラクターは例外をスローする場合があります。MSDN - FileStream ClassUnauthorizedAccessExceptionで定義されているように、これは例外です。これを処理するには、次を使用できます。

try {
    $stream = New-Object System.IO.FileStream($destinationfolder + $newFileName + $extension), Create
    $writer = New-Object System.IO.BinaryWriter($stream)
    $writer.write($binary)
    $writer.Close()
} catch [UnauthorizedAccessException] {
    #Handle your exception, ex. log it. Exception is stored in variable $_  and includes properties like $_.message
} catch {
    #Catch every possible terminating exception except 'UnauthorizedAccessException'
}

例外のプロパティを調べるには、次を使用します

(new-object UnauthorizedAccessException) | gm

また

(new-object Exception) | gm 

(とにかく、すべてのプロパティがこの一般的な例外から継承されていない場合は 90%)

ここで SO または Google で検索して、try/catch とトラップの詳細を確認してください。

于 2013-02-27T16:59:12.723 に答える