2014-12-01 53 views
0

如何使用Powershell 2.0遠程創建新的MultiString Array並將其傳遞到註冊表?在Powershell中編輯多字符串數組以獲取註冊表值

#get the MultiLine String Array from the registry 
$regArry = (Get-Itemproperty "hklm:\System\CurrentControlSet\Control\LSA" -name "Notification Packages").("Notification Packages") 

#Create a new String Array 
[String[]]$tempArry = @() 

#Create an ArrayList from the Registry Array so I can edit it 
$tempArryList = New-Object System.Collections.Arraylist(,$regArry) 


# remove an entry from the list 
if ($tempArryList -contains "EnPasFlt") 
{ 
    $tempArryList.Remove("EnPasFlt") 
} 


# Add an entry 
if (!($tempArryList -contains "EnPasFltV2x64")) 
{ 
    $tempArryList.Add("EnPasFltV2x64") 
} 

# Convert the list back to a multi-line Array It is NOT creating new Lines!!! 
foreach($i in $tempArryList) {$tempArry += $1 = "\r\n"]} 


# Remove the old Array from the Registry 
(Remove-ItemProperty "hklm:\System\CurrentControlSet\Control\Lsa" -name "notification packages").("Notification Packages") 

# Add the new one 
New-itemproperty "hklm:\System\CurrentControlSet\Control\Lsa" -name "notification packages" -PropertyType MultiString -Value "$tempArry" 

一切工作很好,除了我不能得到的值去一個新的行。我試過/r/n'r'n。我在註冊表中的輸出顯示了一行內的所有內容,並添加了我添加的文字換行符和回車標誌。我如何讓數組識別這些而不是直接打印它們?

+1

在你的問題你正在使用''r'n'(單引號),但你需要使用的字符是反引號'\'',所以'\'r \'ñ '。你能確認你正在使用哪一個? – briantist 2014-12-01 22:32:26

+0

太棒了!我會嘗試。你能給我一個加號嗎?如果你願意,你可以回答這個問題,如果它的工作,我會給你檢查。 – antman1p 2014-12-01 22:41:11

回答

3

有沒有必要擺弄ArrayList和linebreaks。特別是如果你想修改一個遠程註冊表。使用時只需將Microsoft.Win32.RegistryKey類:

$server = '...' 

$subkey = 'SYSTEM\CurrentControlSet\Control\LSA' 
$value = 'Notification Packages' 

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $server) 
$key = $reg.OpenSubKey($subkey, $true) 
$arr = $key.GetValue($value) 

$arr = @($arr | ? { $_ -ne 'EnPasFlt' }) 
if ($arr -notcontains 'EnPasFltV2x64') { 
    $arr += 'EnPasFltV2x64' 
} 

$key.SetValue($value, [string[]]$arr, 'MultiString') 
+0

真棒回答。我強烈建議去這條路線,而不是其他方式。 – briantist 2014-12-01 23:23:22

+0

這是Powershell 2.0中可用的嗎?我以前就是這樣做的,它不會工作。 – antman1p 2014-12-02 15:52:54

+1

@ antman1p定義「不起作用」。即使使用PowerShell v2和.Net Framework 2.0,上面也應該可以工作。 – 2014-12-02 16:08:32

1

在Powershell中,轉義字符是反引號「`」,而不是撇號'。所以,你會想試試這個:

foreach($i in $tempArryList) {$tempArry += $1 = "`r`n"]} 

BACKTICK很可能選擇,因爲一個反斜槓\是Windows路徑分隔符。

+0

這很棒!謝謝!請給我一個加號? – antman1p 2014-12-01 22:52:19

相關問題