今日、この単純な (?) 関数を機能させるのに苦労していました。
txt ベースのファイルからコンピューター名を読み取る PowerShell スクリプトがあります。次のワンライナーで PowerShell セッションから実行すると、正常に動作します。
./"Server Health Check.ps1" -List One-off.txt
ご覧のとおり、ファイル名が長いため、引用符で囲みます。
ただし、スクリプトの呼び出しに使用されるテキスト ファイルの選択肢を渡すラジオ ボックスを備えた PowerShell GUI フォームを作成しています。トリックは、スクリプトを別の管理者アカウントで実行する必要があり、それを機能させる方法がわかりません。
使用していない別のスクリプトについては、次の行に沿って何かを使用できることを知っています。これは古い DOS「runas」を使用しますが、-list 関数では機能しません。
invoke-command -scriptblock {runas.exe /user:domain\$Env:Username"admin" "powershell.exe -file \"\\Server\c$\LONG FOLDER\Server Health Check.PS1""}
要するに、コマンド ラインからパラメーター (-List) を読み取る別の資格情報を使用してスクリプトを起動するにはどうすればよいでしょうか。また、スペースを含むフォルダーを含むディレクトリ構造を維持したいと考えています。スクリプトのタイトルは「Server health check.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.
これはinvoke-commandまたはstart-processで実行できるとほぼ確信していますが、正しいフォーマットを取得するだけの問題ですか? start-process または invoke-command を使用した試行のどこかで / または ' または "" が欠落している可能性があります。
どんな助けでも大歓迎です!
4 月 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 パラメータが無効であることを示すエラーが発生します。これを行う方法があると確信しています。