4

Jenkins Job 経由で powershell を使用してコードをデプロイしたいと考えています。これは、powershell ise で正常に動作します。

$username = "mydomain\builder"
$password = "notmypassword"
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
$Arguments = "-ExecutionPolicy Bypass -File C:\Test.ps1 -NoNewWindow -WorkingDirectory C:\Windows\System32\WindowsPowerShell\v1.0 -NoLogo -NonInteractive"

Start-Process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Credential $credentials -ArgumentList $Arguments

しかし、ローカル システムを使用する Jenkins から実行すると、次のエラー メッセージが表示されます。

Start-Process : This command cannot be run due to the error: Access is denied.
At C:\WINDOWS\TEMP\hudson5557889306949142167.ps1:7 char:1
+ Start-Process powershell.exe -Credential $credentials -ArgumentList $

変更すると、Jenkins サービスを別のアカウントに変更すると機能します。ローカル システム アカウントで昇格されたアクセス許可が機能しないのはなぜですか?

注: test.ps1 の唯一のコードは New-Item c:\scripts\new_file.txt です。

4

1 に答える 1

3

LocalSystemでスクリプトを実行する場合、特定のコマンドに制限があるようです。LocalSystemを考えると、これはセキュリティの観点から理にかなっています。

ローカル リソースに完全に無制限にアクセスできます。LocalSystem サービスはシステム全体をダウンさせる可能性があるため、これは LocalSystem の欠点でもあります。

参照: MSDN、LocalSystem アカウント

SuperUser にも同様の質問があります。これまでのところ、この回答への参照がなく、LocalSystem アカウントから昇格されたアクセス許可を持つプロセスを作成できません。

TechNet にも同様の質問があります: Runing PowerShell script with the permissions of the LocalSystem userと、タスク スケジューラ経由でスクリプトを実行することを提案する回答があります。

パスワードが期限切れにならない適切な権限でrunaswith/savecredおよび aを使用することを考えることができます。一度インタラクティブに呼び出す必要が/user:...あるAFAIRは、資格情報を入力すると、次の呼び出しから保存された資格情報が取得されます。runas/savecred

于 2015-11-01T13:33:39.210 に答える