Я изо всех сил пытался заставить эту простую (?) Функцию работать сегодня.
У меня есть сценарий PowerShell, который считывает имена компьютеров из текстового файла. Он отлично работает при запуске из сеанса PowerShell с помощью следующего однострочного кода:
./"Server Health Check.ps1" -List One-off.txt
Как видите, у него длинное имя файла, поэтому оно заключено в кавычки.
Однако я создаю форму графического интерфейса PowerShell с переключателями, которые передают выбор текстового файла, который будет использоваться для вызова сценария. Хитрость в том, что скрипт нужно запускать с альтернативной учетной записью администратора, и я не понимаю, как это сделать.
Для другого сценария, который у меня есть, который не используется, я знаю, что могу использовать что-то вроде следующего, он использует старые «руны» DOS, однако он не работает с функцией -list.
invoke-command -scriptblock {runas.exe /user:domain\$Env:Username"admin" "powershell.exe -file \"\\Server\c$\LONG FOLDER\Server Health Check.PS1""}
Итак, в двух словах, как запустить сценарий с альтернативными учетными данными, который считывает параметр (-List) из командной строки? Я также стремлюсь сохранить свою структуру каталогов, которая включает папки с пробелами. Сценарий называется: "Проверка работоспособности сервера.ps1".
Последнее, что я пробовал, было следующим
$ScriptPath = "C:\SCRIPTS FOLDER\Server Health Check.ps1"
$ArgList = "-List C:\SCRIPTS FOLDER\One-off.txt"
Invoke-Command -filepath $ScriptPath -Credential DragonBallDomain\$Env:UserName"Admin" -ArgumentList $ArgList
В результате появилось следующее сообщение:
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
Я почти уверен, что это можно сделать с помощью команды вызова или запуска процесса, это просто вопрос правильного форматирования? Я, вероятно, пропустил / или ' или "" где-то в моих испытаниях с запуском процесса или командой вызова.
Любая помощь приветствуется!
Обновление от 30 апреля:
Я пробовал еще немного, чтобы сделать эту работу, я близок, но все еще не совсем там.
$LongScriptPath = resolve-path Script.ps1
$LongFolderPath = \\UNC\PATH TO FOLDER\WITH LONG NAME\
start-process -filepath powershell.exe -argumentlist " -file``"$($FilePath.path)`"" -cred DOMAIN\USERID -WorkingDirectory "$LongFolderPath"
Добавление -credential вызывает ошибку, указывающую, что параметр -file недействителен. Я уверен, что есть способ сделать это.