簡體   English   中英

使用內聯管理員憑據運行 Powershell 腳本來啟動和停止 Windows 服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM