我有一個腳本,它利用$env:appdata它導致C:\Users\username\AppData\Roaming. 如果我手動運行腳本,即使在“管理”提示中也能很好地作業。但是,當它作為具有“最高特權”的“SYSTEM”下的計劃任務的一部分運行時,它會輸出c:\windows\system32\config\system.
我可以使用(Get-CimInstance CIM_ComputerSystem).Username. 如何獲取其他環境變數,尤其是 AppData 路徑?
uj5u.com熱心網友回復:
這里的問題是,下運行SYSTEM是SYSTEM實際上是內置的機器帳戶可以達到的最高權限。這是一個甚至可以取代內置本地管理員的帳戶。如果您正在運行某些東西SYSTEM,它的用戶組態檔是C:\Windows\System32\config\system. 這一切都按預期和設計運行。
如果您需要在另一個用戶的背景關系中運行,最好的解決方案是創建以該用戶身份執行的任務,并將權限適當地委派給主體。事實上,運行某些東西SYSTEM幾乎從來都不是正確的解決方案,除非您需要執行默認情況下它可以單獨執行的特定功能之一(對于這些功能,通常不建議將這些權限委派出去)。
如果它需要在 下運行SYSTEM,那么您知道SYSTEM組態檔的位置,因此AppData在任務完成后適當地播種或檢索工件。但聽起來您真的想以其他用戶身份運行它,這就是您應該將任務配置為運行的方式。
我不建議SYSTEM用戶這樣做,但是如果由于其他原因需要查看其他用戶的環境變數,只要另一個行程沒有打開配置單元,您就可以加載他們的注冊表配置單元(就像該用戶是正在使用regedit.exe或已加載,就像我要向您展示自己一樣):
先說兩件事:
您需要知道他們的用戶組態檔的位置才能執行此操作
PowerShell 無法加載其他用戶的配置單元本身,因此我們必須使用該
reg.exe命令來執行此操作- Registry 提供程式仍然可以訪問資料,只是無法加載它。
reg load HKEY_Users\username "C:\Users\username\NTUSER.DAT" # If we can't load it then no point continuing if( $? ) { try { # Read envvars into variable $uservars = Get-ItemProperty HKEY_Users:\Environment } finally { reg unload HKEY_Users\username if ( !$? ) { Write-Warning "Unable to unload userhive, see previous error message for details" } } # Do what you need here # $uservars is a `PSCustomObject` containing the other user's # environment variables. } else { throw "Unable to load userhive, logon script could not complete" }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/323319.html
標籤:视窗 电源外壳 视窗 10 powershell-7.0
上一篇:ConvertTo-Json正在添加額外的反斜杠和雙引號
下一篇:如何使用正則運算式獲取字串中的值
