[英]Running Powershell script using inline admin credentials to start and stop windows services
我可以在機器上以管理員身份訪問,並且必須使用 Powershell 腳本啟動、停止和重新啟動某些窗口服務。 我們不希望在運行腳本時出現 UAC 提示,因為只有一個用戶可以訪問該機器。 同樣由於某些特定要求,我們必須通過在其中添加管理員憑據來運行該腳本文件。
連同到目前為止我嘗試過的其他解決方案,接近我正在尋找的解決方案如下
$username = "Domain\user"
$password = ConvertTo-SecureString "myPassword" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $password)
Set-Service -Name Spooler -Status Running -PassThru -Credential $psCred
但我收到以下錯誤。
設置服務:找不到與參數名稱“憑據”匹配的參數。 在 line:6 char:53 + ... t-Service -Name Spooler -Status Running -PassThru -Credential $psCred + ~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Set-Service ], ParameterBindingException +fullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SetServiceCommand
更新 1 (嘗試建議)
Invoke-Command -credential $psCred -command {Set-Service -Name Spooler -Status Running -PassThru} -computername myComputerName
[myComputerName] 連接到遠程服務器 myComputerName 失敗並顯示以下錯誤消息:客戶端無法連接到請求中指定的目標。 驗證目標上的服務是否正在運行並且正在接受請求。 查閱在目標上運行的 WS-Management 服務的日志和文檔,最常見的是 IIS 或 WinRM。 如果目標是 WinRM 服務,則在目標上運行以下命令來分析和配置 WinRM 服務:“winrm quickconfig”。 有關詳細信息,請參閱 about_Remote_Troubleshooting 幫助主題。 + CategoryInfo : OpenError: (myComputerName:String) [], PSRemotingTransportException +fullyQualifiedErrorId :CannotConnect,PSSessionStateBroken
更新 2
我必須使用命令Enable-PSRemoting -Force -SkipNetworkProfileCheck
在機器上Enable-PSRemoting -Force -SkipNetworkProfileCheck
以便Invoke-Command
可以執行但在重復命令Invoke-Command -credential $psCred -command {Set-Service -Name Spooler -Status Running -PassThru} -computername localhost
我收到以下錯誤
[localhost] 連接到遠程服務器 localhost 失敗並顯示以下錯誤消息:訪問被拒絕。 有關詳細信息,請參閱 about_Remote_Troubleshooting 幫助主題。 + CategoryInfo : OpenError: (localhost:String) [], PSRemotingTransportException +fullyQualifiedErrorId : AccessDenied,PSSessionStateBroken
在提升的 powershell 窗口中運行相同的命令集工作正常。
考慮到我是 Powershell 世界的新手,您能否指導我朝着正確的方向發展。
如Set-Service的官方文檔中所述
你可以這樣試試嗎?
$Cred = Get-Credential
$hostname = "$env:computername.$env:userdnsdomain"
Write-Host $hostname
Invoke-Command -ComputerName $hostname -Credential $Cred -ScriptBlock{ Start-Service -Name Spooler}
此外,如果您不想提示輸入憑據,則可以將憑據存儲在 Windows 憑據管理器中,並從它們的 PowerShell 腳本中獲取。 請參閱此答案以將憑據管理器與 PowerShell 結合使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.