web-dev-qa-db-ja.com

export-csvファイルを試す/キャッチする方法

私が使用しているコードは以下のとおりです。コードは正常に機能し、try/catch部分を除いて私がやりたいことを実行します。 SCCM 2016、Windows 10 Enterprise1709およびPowerShellv5を使用しています。主な問題は、Configuration Managerコンソールの[スクリプトの実行]からスクリプトを実行すると、スクリプトが実行されますが、実行されることです。ターゲットサーバーにレポートファイルを書き込まないでください。サーバーとクライアントのログファイルを調べたところ、正常に実行されたことを意味する終了コード0が表示されました。問題が発生する可能性を排除するためにFQDNを追加しました。フォルダーの場所を共有し、フォルダーが見つかるようにすべてのユーザーに完全な権限を付与しました。レポートがターゲットパスに書き込まれない理由について、エラーや兆候はありません。このパスをから実行してテストしました。 Config Consoleで「スクリプトを実行」し、出力の場所をc:\ Tempに変更すると、正常に機能します。レポートファイルがターゲットパスに書き込まれない理由を解決するための支援が必要です。ありがとうございます。

Set-ExecutionPolicy Bypass

$env:COMPUTERNAME = HostName

$DeplPath = "AppData\LocalLow\Sun\Java\Deployment\deployment.properties"

$javausers = foreach ($User in Get-ChildItem C:\Users -Directory){
    $folder = Join-Path $User.FullName $DeplPath
    if (Test-Path $folder) {
        $TestResult = "True  - deployment.properties"
    } Else {
        $TestResult = "False - Path not found"
    }
    [PSCustomObject]@{
        "Computer Name" = $env:COMPUTERNAME
        "Results"       = $TestResult
        "Users"         = $user.Name
    }
}
#$javausers
try
{
$javausers | Export-Csv -NoTypeInformation -Path "\\ourserver.domain.com\d$\Java_User_Reports\JavaUsersList.csv" -Append
}
catch
{
$javausers | Export-Csv -NoTypeInformation -Path "\\ourserver.domain.com\d$\Java_User_Reports\JavaUsersList.csv" -Append
}
1
Manning

さて、try/catchを理解した後、構成マネージャーを介してスクリプトを再度実行すると、レポートが書き込まれるターゲットパスへの「アクセスが拒否されました」というエラーが表示されました。フォルダが共有されているので、パスにd $は必要ないことに気づきました。そのせいで否定されていました。これで、完全に機能するスクリプトができました。以下に動作するコードを提供します。

Set-ExecutionPolicy Bypass

$env:COMPUTERNAME = HostName

$DeplPath = "AppData\LocalLow\Sun\Java\Deployment\deployment.properties"

$javausers = foreach ($User in Get-ChildItem C:\Users -Directory){
    $folder = Join-Path $User.FullName $DeplPath
    if (Test-Path $folder) {
        $TestResult = "True  - deployment.properties"
    } Else {
        $TestResult = "False - Path not found"
    }
    [PSCustomObject]@{
        "Computer Name" = $env:COMPUTERNAME
        "Results"       = $TestResult
        "Users"         = $user.Name
    }
}
#$javausers
try
{
$javausers | Export-Csv -NoTypeInformation -Path "\\ourserver.domain.com\Java_User_Reports\JavaUsersList.csv" -Append
}
catch
{
$_| Out-File "c:\Temp\Java_test_error.txt"
}
1
Manning