簡體   English   中英

如何在powershell中更改另一個用戶的特定注冊表設置

[英]How to change specific registry setting for another user in powershell

目標:

powershell中編輯特定用戶的特定注冊表項設置,而不是其他用戶

已知:

操作系統:Windows 8.1 Embedded Industry Pro(與Win 8.1相同,但具有一些嵌入式功能)

我可以在目標機器上手動執行此操作,方法是打開REGEDIT,選擇HKU,然后單擊File Menu,單擊Load Hive,導航到用戶的配置文件目錄,例如:c:\\ users \\ MrEd,當出現提示時,輸入'ntuser .dat' - 導入HKEY_CURRENT_USER。 Hive將加載到HKU,您可以在其中導航並進行必要的修改。

摘要:

我有一個powershell腳本,它返回特定用戶的SID,但是當在注冊表配置單元的上下文中使用時,“找不到”配置單元 - 所以我猜我一定錯過了一步? 如何從Powershell“加載蜂巢”? 或者我在某個地方錯過了一個特殊的,神奇的,山羊 - 內臟 - 鍵盤咒語?

Param(
    [string]$user= $null
)


Function GetSIDfromAcctName()
{
    Param(
        [Parameter(mandatory=$true)]$userName
    )
    $myacct = Get-WmiObject Win32_UserAccount -filter "Name='$userName'" 
    return $myacct.sid
}

if($user)
{
    $sid = GetSIDfromAcctName $user
    New-PSDrive HKU Registry HKEY_USERS
    $myHiveEntry = Get-Item "HKU:\${sid}"
    Write-Host "Key:[$myHiveEntry]"
}

您的現有代碼應該適用於已經加載了配置單元的用戶(如當前登錄的用戶),但它不會嘗試加載配置單元。

我不知道如何通過編程方式調用來加載配置單元,但是你可以將其發送到reg.exe

這最終變得有點笨拙。 如果它在任何地方都在使用,它似乎有卸載蜂巢的問題,所以我在這個樣本中放了一堆垃圾來試圖擺脫可能讓它打開的東西,但在我的測試中,它可能需要在reg unload命令成功之前很長一段時間,因此finally塊中的整個重試部分。

這是超級未經修飾的,我只是當場鞭打它。

Function GetSIDfromAcctName()
{
    Param(
        [Parameter(mandatory=$true)]$userName
    )
    $myacct = Get-WmiObject Win32_UserAccount -filter "Name='$userName'" 
    return $myacct.sid
}

$user = 'someuser'

$sid = GetSIDfromAcctName -userName $user

$path = Resolve-Path "$env:USERPROFILE\..\$user\NTUSER.DAT"

try {
    reg load "HKU\$sid" $path 

    #New-PSDrive -Name HKUser -PSProvider Registry -Root "HKEY_USERS\$sid"

    #Get-ChildItem HKUser:\

    Get-ChildItem Registry::\HKEY_USERS\$sid

} finally {

    #Remove-PSDrive -Name HKUser

    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers()

    $retryCount = 0
    $retryLimit = 20
    $retryTime = 1 #seconds

    reg unload "HKU\$sid" #> $null

    while ($LASTEXITCODE -ne 0 -and $retryCount -lt $retryLimit) {
        Write-Verbose "Error unloading 'HKU\$sid', waiting and trying again." -Verbose
        Start-Sleep -Seconds $retryTime
        $retryCount++
        reg unload "HKU\$sid" 
    }
}

這不是使用PS驅動器,但該代碼也在那里,注釋掉了。

請注意,如果沒有使用SID命名hive掛載點,則根本不需要SID,因為無論如何都使用用戶名來查找NTUSER.DAT文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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