rlb*_*sbe 2 powershell windows-explorer administrator
我有一个以这种方式工作的 Powershell manteinance 脚本:
kill explorer
do things
restart explorer
Run Code Online (Sandbox Code Playgroud)
此脚本以提升模式执行,但我需要在没有管理员权限的情况下重新启动资源管理器。任何的想法?
谢谢
据我所知,不可能从提升的进程直接启动非提升的进程(即使用标准的低权限令牌)。这不是 PowerShell 限制,而是 Windows 中 UAC 的工作方式。
从http://msdn.microsoft.com/en-us/library/windows/desktop/bb756914.aspx:
一个常见问题是如何从提升的进程启动未提升的应用程序,或者更根本的是,如何在提升运行后使用未提升的令牌启动进程。由于没有直接的方法可以做到这一点,通常可以通过以标准用户身份启动原始应用程序并仅提升应用程序中需要管理权限的那些部分来避免这种情况。这样,始终有一个非提升的进程可用于以当前登录的桌面用户身份启动其他应用程序。然而,有时,提升的进程需要让另一个应用程序以非提升的方式运行。这可以通过使用 Windows Vista® 中的任务调度程序来完成。提升的进程可以注册一个任务以作为当前登录的桌面用户运行。
那篇文章提到了两种可能的解决方案:
在非提升模式下运行尽可能多的脚本,并且只提升那些需要它的部分。换句话说,在非提升脚本中杀死并重新启动资源管理器,并在提升模式下运行第二个脚本来“做事”:
Stop-Process -ProcessName explorer
Start-Process PowerShell.exe -Verb Runas -ArgumentList "-File path_to_script\script.ps1"
Start-Process explorer.exe
Run Code Online (Sandbox Code Playgroud)
该Runas动词将导致在提升模式下启动第二个 PowerShell 进程。但是,这会触发 UAC 提示,因此如果要完全自动化地运行此脚本,这不是一个好的解决方案。
创建计划任务以在提升的操作完成后启动资源管理器,运行该任务并将其删除。您可以使用以下schtasks.exe方法执行此操作:
schtasks /Create /TN "foobar" /TR explorer.exe /SC OnLogon
schtasks /Run /TN "foobar"
schtasks /Delete /TN "foobar" /F
Run Code Online (Sandbox Code Playgroud)
只需确保为任务选择一个不会与其他任务冲突的名称。
您也可以结合上述两种方法,创建一个计划任务,以在提升模式下运行第二个 PowerShell 脚本,其余的非提升模式。这具有不产生 UAC 提示的优点,但引入了安全风险,即任何对脚本具有写入权限的人几乎可以在您的计算机上执行任何操作。但是,根据您运行和提升当前脚本的准确程度,这可能是一个没有实际意义的问题。
如果您的脚本仅由您运行,则第三个选项是将其配置为使用您的凭据启动新的 explorer.exe 进程:
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("username", (ConvertTo-SecureString -String "password" -AsPlainText -Force))
Start-Process explorer.exe -Credential $Cred
Run Code Online (Sandbox Code Playgroud)
这里的缺点是您的密码以纯文本形式存储在脚本中。您还可以通过在 PowerShell 提示符中键入以下内容,以加密形式将其存储在单独的文件中:
Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File C:\pw_encrypted.txt
Run Code Online (Sandbox Code Playgroud)
然后输入您的密码(它将在 PS 提示中显示为星号)并按 Enter。现在您可以像这样在脚本中使用它:
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("username", (Get-Content C:\pw_encrypted.txt | ConvertTo-SecureString))
Start-Process explorer.exe -Credential $Cred
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2567 次 |
| 最近记录: |