我有以下PowerShell
脚本可与Windows服务器管理员帐户创建会话。我想在Invoke-command
失败的情况下进行报告,并将错误保存在文件中
以下是我编写的代码,但是如果我篡改了.json
文件(设置了错误的用户名),则执行将失败并且不会创建error_report.txt
#Param(
$user = "lamda"
#)
$user_domain = (Get-WmiObject Win32_ComputerSystem).Domain
$user_computer = (Get-WmiObject Win32_ComputerSystem).Name
$file = "error_report.txt"
If ((Test-Path "creds.json") -eq $True)
{
$jsonfile = Get-ChildItem creds.json
if ($jsonfile.Length -eq 0)
{
#$file = "error_report.txt"
Set-Content -Path $file -Value "Error:The file 'creds.json' is empty"
break
}
else
{
$creds= (Get-Content creds.json | Out-String | ConvertFrom-Json)
$admin = $creds.username
$passwd = $creds.password
if (($admin) -and ($passwd))
{
$Password = ConvertTo-SecureString -String $passwd -AsPlainText -Force
$credential = [pscredential]::new($admin,$Password)
$command = Invoke-Command -ComputerName Server.$user_domain -FilePath
C:\SECnology\Data\Utilities\Updating.ps1 -ArgumentList
$user,$admin,$user_computer -Credential $credential
If ($command -eq $false)
{
$file = "error_report.txt"
Set-Content -Path $file -Value "Error:Session between user and server
could not be created,please check your Credentials"
}
break
}
elseif (([string]::IsNullOrEmpty($admin)) -or ([string
]::IsNullOrEmpty($passwd)))
{
#$file = "error_report.txt"
Set-Content -Path $file -Value "Error:One object of 'creds.json' seems
to be empty.Please check your file "
}
}
break
}
else
{
#$file = "error_report.txt"
Set-Content -Path $file -Value "Error:The file 'creds.json' does not exist"
}
答案 0 :(得分:0)
我认为问题在于您在if语句中定义条件的方式。
您使用npm audit fix --force
,但是如果连接失败,它不会将-eq $false
的值设置为command
,它将使命令保留为空,因为它不返回任何值(错误红色)。
您可以尝试在if语句中使用null运算符(!),这样:
$false
或者您可以为invoke命令提供一个错误变量,并在运行时检查该变量是否具有值。
If (!$command){Do stuff}