PS 5.1.22621.4391 (e estou preso a ele)
Às vezes preciso executar isto:
plink -t -load "$Session" -batch -m $ShellFile
mas às vezes preciso adicionar outra opção:
plink -t -load "$Session" -batch -m $ShellFile -pw $SshPw
Isso parece tão brega, mas no mau sentido:
if ($SshPw)
{ plink -t -load "$Session" -batch -m $ShellFile -pw $SshPw }
else
{ plink -t -load "$Session" -batch -m $ShellFile }
Tentei construir o comando como uma string e depois executá-lo via &
, mas falhou, pois aparentemente o que &
processa é apenas o nome do programa.
PS C:\Users> $X="plink -t -load `"$Session`" -batch -m $ShellFile"
PS C:\Users> $X
plink -t -load "FIS-Q-LBX-PGS-101-a" -batch -m C:\<somedir>\daily.txt
PS C:\Users> &$X
& : The term 'plink -t -load "FIS-Q-LBX-PGS-101-a" -batch -m C:\<somedir>\daily.txt' is not recognized as the name of a cmdlet,
function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:2
+ &$X
+ ~~
+ CategoryInfo : ObjectNotFound: (plink -t -load ...\Temp\daily.txt:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Existe uma solução alternativa? Meu Google-fu está faltando.
Use splatting que passa os argumentos por meio de um dicionário
Veja exemplo e about_Splatting
Editar: O splatting usando um dicionário não funcionará para aplicativos nativos. Você precisará usar um array :
Ou você pode usar a
-ArgumentList
opçãoStart-Process
que também recebe um array:Eu usaria um processo de início para melhor controle. Algo como
E um caminho literal para o plink seria melhor, então se estiver no diretório de script .\plink.exe
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.5
Edição: Como ainda acho que isso está no caminho certo, o OP simplesmente não analisou todos os ângulos. A solução para o erro acima está em como ele está sendo usado, usando o exemplo já fornecido (usando o bloco de notas porque não estou usando o plink neste sistema), a invocação ainda pode ocorrer.