У меня есть сценарий powershell на компьютере A, который использует PSSession
для вызова команды на компьютере B. На компьютере B есть сценарий powershell, который принимает 4 параметра. Когда я вызываю этот сценарий с 4 аргументами в качестве переменных (которыми они ДОЛЖНЫ быть), они передаются как пустые строки / null. Когда я передаю их как строки (например, -Argument1 "Hello"
), эта строка будет передаваться как «Hello», а не как NULL / пустая строка.
Может кто-нибудь сказать мне, почему они не прошли правильно и как это исправить?
Версия powershell на клиенте - 5.1.17134.112
. Удаленный компьютер использует 5.1.14393.2248
. Эти версии были получены путем запуска $PSVersionTable.PSVersion
.
Клиент использует Windows 10 Pro 10.0.17134
. Сервер использует Windows 2016 Datacenter 10.0.14393
и работает как виртуальная машина в Azure.
Я пытался использовать Script.ps1 -Argument1 $ClientArgument1 -Argument2 $ClientArgument2 ...
для передачи переменных И чтобы использовать ArgumentList
для передачи значений через запятую, разделенных в сценарии, но обе эти попытки привели к тому, что вещи не были напечатаны.
Я заметил, что когда я использую -Argument1 "Hello" -Argument2 $ClientArgument2 -Argument3 $ClientArgument3 -Argument4 $ClientArgument4
, Hello печатается.
код
Клиент, который подключается к удаленному компьютеру
$ErrorActionPreference = "Stop"
#Create credentials to log in
$URL = 'https://url.to.server:5986'
$Username = "username"
$pass = ConvertTo-SecureString -AsPlainText 'password' -Force
$SecureString = $pass
$MySecureCreds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Username,$SecureString
$ClientArgument1 = "Argument 1"
$ClientArgument2 = "Argument 2"
$ClientArgument3 = "Argument 3"
$ClientArgument4 = "Argument 4"
#Create the remote PS session
$sessionOption = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$session = New-PSSession -ConnectionUri $URL -Credential $MySecureCreds -SessionOption $sessionOption
#Call the remote script and pass variables
Invoke-Command -Session $session -Command {C:\Path\To\Script\On\Remote\Machine\Script.ps1 -Argument1 $ClientArgument1 -Argument2 $ClientArgument2 -Argument3 $ClientArgument3 -Argument4 $ClientArgument4}
#Note: Command is used because Command allows me to execute a script that is located on disk of the remote machine
вызываемый скрипт удаленного компьютера
param(
[String]$Argument1,
[String]$Argument2,
[String]$Argument3,
[String]$Argument4
)
Write-Host 'Results of the 4 parameters passed into this script:'
Write-Host $Argument1
Write-Host $Argument2
Write-Host $Argument3
Write-Host $Argument4
Write-Host "The results have been printed"
Ожидаемые и фактические результаты
Ожидаемые результаты:
Results of the 4 parameters passed into this script:
Argument 1
Argument 2
Argument 3
Argument 4
The results have been printed
Фактические результаты
Results of the 4 parameters passed into this script:
The results have been printed
Большое спасибо за потраченное время!