我使用的代码如下。除了 try/catch 部分之外,代码运行良好,并执行我想要的操作。我使用的是 SCCM 2016、Windows 10 Enterprise 1709 和 PowerShell v5。主要问题是,当我通过配置管理器控制台中的“运行脚本”运行脚本时,脚本会运行但不会在目标服务器上写入报告文件。我检查了服务器和客户端上的日志文件,得到的退出代码为 0,这意味着已成功运行。我添加了 FQDN 以消除这是问题的可能性。我共享了文件夹位置并授予所有用户完全权限以确保可以找到该文件夹。没有错误或任何迹象表明报告未写入目标路径的原因。我通过从配置控制台中的“运行脚本”运行此路径并将输出的位置更改为 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
好的,在我弄清楚 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"
}