Я пытаюсь написать оболочку для Get-PSSession, которая упрощает SSH для меня, но я сталкиваюсь с проблемой, когда кажется, что ядро powershell не анализирует переключатели в аргументах, передаваемых оператору '&':
$cmd, $args = "dir", ("-Depth", "1", "c:", "d:")
& $cmd $args
$cmd, $args = "dir", @("-Depth", "1", "c:", "d:")
& $cmd $args
$cmd, $args = "dir", ("-Depth:1", "C:", "D:")
& $cmd $args
все жалуются
Get-ChildItem : Cannot find path 'C:\...\-Depth' because it does not exist.
Единственный способ сделать это, кажется, с небезопасным чувством
Invoke-Expression "& $cmd $args"
но теперь я должен убедиться, что все параметры правильно экранированы / указаны / и т.д.
В моем последнем случае число аргументов является переменным:
if ($KeyFilePath) {
$arglist += ("-KeyFilePath", $KeyFilePath)
}
и т.д.
Есть ли какой-нибудь лучший способ сделать это? Есть ли способ гарантировать, что любые предоставленные пользователем параметры будут правильно указаны / экранированы так, что злоумышленник не сможет просто обойти их, добавив свой собственный символ escape / кавычки? Есть ли способ использовать карту / хэш?