вызов сценария PowerShell из командного файла для подключения к удаленному компьютеру не работает - PullRequest
0 голосов
/ 08 ноября 2019

Когда я обычно запускаю сценарий PowerShell, он работает нормально, возникает проблема при вызове того же сценария из командного файла.

Unt1.ps1 script:

$linux_app_user="ORXXXX\"+$args[0]
$pass_win=$args[1]
$path=$args[2]
$pass = ConvertTo-SecureString -AsPlainText $pass_win -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList 
$linux_app_user, $pass
$Invoke-Command -ComputerName XXXXXXXX.XXXX.XXX.XXXX -Credential $cred -ErrorAction 
Stop -ScriptBlock {
      param($path)
      Invoke-Expression $path
} -Arg $path

cal.batскрипт:

@echo off

SET Server=slXXXXXXXX.XXX.XXXX.com
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%
powershell.exe -ExecutionPolicy  RemoteSigned -File 
  C:\Users\chaj\Documents\String\Unt1.ps1 'XXXX' 'XXXX@321' 'C:\cal.bat'

Ошибка:

[xxxxxx.xx.xxxxx.xxx] Connecting to remote server xxxxxx.xx.xxxxx.xxx failed
with the following error message : The user name or password is incorrect.
For more information, see the about_Remote_Troubleshooting Help topic.
At C:\Users\chafg\Documents\String\Unt1.ps1:7 char:1
+ $Result=Invoke-Command -ComputerName xxxxxx.xx.xxxxx.xxx -Credenti ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (xxxxxx.xx.xxxxx.xxx) [], PSRemotingTransportException
    + FullyQualifiedErrorId : LogonFailure,PSSessionStateBroken

1 Ответ

0 голосов
/ 09 ноября 2019

При использовании PowerShell CLI с параметром -File используются все аргументы дословно - кроме случаев, когда они заключены в "..." (двойные кавычки): в отличие от использования -Command, '...' (одинарные кавычки) не распознаются как строка разделители .

Следовательно, вашкоманда (здесь упрощенно):

powershell.exe -File C:\path\to\Unt1.ps1 'XXXX' 'XXXX@321' 'C:\cal.bat'

заставляет скрипт Unt1.ps1 видеть аргументы с включенным ',что не ваше намерение;например, вместо $args[0] получения XXXX, как и предполагалось, он получает 'XXXX' дословно.

Исправление заключается в использовании "..." (двойные кавычки) :

powershell.exe -File C:\path\to\Unt1.ps1 "XXXX" "XXXX@321" "C:\cal.bat"

В качестве альтернативы, учитывая, что ваши конкретные примеры аргументов не требуют цитирования (хотя могут быть и реальные):

powershell.exe -File C:\path\to\Unt1.ps1 XXXX XXXX@321 C:\cal.bat
...