2015-01-16 8 views
0

레지스트리 키 값을 업데이트하는 작업 스크립트가 있습니다.보다 빠르고/쉽고/더 짧은 방법이 있는지 궁금합니다. 다른 방법은 무엇입니까?레지스트리 값을 쉼표로 구분/구분하여

$array = @()  
$RegKey = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" | select AppInit_DLLs | % {$_.AppInit_DLLs -split ","} 
foreach ($value in $RegKey) 
{ 
    if ($value -notmatch "mfaphook64.dll") 
    { 
     $array+= $value   
    } 
    if ($value -match "mfaphook64.dll") 
    { 
     $value = "mfaphook64.dll" 
     $array+= $value 
    } 
} 
$array = $array -join ","  
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name AppInit_DLLs -Value $array -Force 

값 전 :

C:\test path\mfaphook64.dll,test.dll 

값 후 :

mfaphook64.dll,test.dll 
+0

에서 찾을 수 있습니까? 그들은 정확한 것을하고있는 것처럼 보입니다 ... – arco444

+0

이 첫 번째 if 문은 검색 문자열을 포함하지 않으면 값을 내 배열에 추가합니다. 두 번째 if 문은 하위 문자열을 새 값으로 바꾸고 배열에 추가합니다. 이 방법으로 다른 모든 하위 문자열을 유지하면서 경로를 바꿀 수 있습니다. – user3208164

+1

아, 너와. "-match"사용에 대해 충분히 신경을 쓰지 않았습니다. – arco444

답변

1
$AppInitdlls = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" | Select-Object -expand AppInit_DLLs 
$AppInitdlls = $AppInitdlls -replace "(.*,)?.+?mfaphook64\.dll(,.*)?",'$1mfaphook64.dll$2' 
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name AppInit_DLLs -Value $AppInitdlls -Force 

이 그냥 문자열을 조작하기 위해 찾고 있다면 배열로 확장 할 필요가 없을 것 mfaphook64.dll. 간단한 -replace은이를 처리 할 수 ​​있어야합니다.

경로를 바꾸려면 현재 수행중인 작업을 수행하는 것이 더 쉬울 수도 있지만, 누군가 내게 맞지 않으면 정규식 솔루션이 더 빠를 것입니다.

정규식 고장 : (.*,)?.+?mfaphook64\.dll(,.*)?

  • (.*,)?가 여기에 수집 된 DLL의 경로 전에 뭔가가 있다면.
  • .+?mfaphook64\.dll은 경로가 무엇이든 일치합니다. 그 쉼표 뒤에있는 모든 문자는 "dll"문자까지입니다.
  • (,.*)? dll의 경로 뒤에 뭔가가 있으면 여기에 수집됩니다.
  • 바꾸기는 이전에 캡처 된 ($1에 캡처) 및 이후 (캡처 : $2) 모든 것을 가져 와서 문자열 "mfaphook64.dll"을 사이에 넣습니다.

라이브 예 Regex101 정확히 두`if` 제표의 목적은 무엇

+0

값에 DLL의 경로가 포함될 수 있으며 매번 같은 위치가 아닐 수도 있습니다. 전체 경로를 삭제하기위한 DLL을 찾고 있습니다. 리터럴 대체는 내 필요에 맞지 않습니다. – user3208164

+0

@ user3208164 OH ok ... 바꾸기 만하면됩니다. 게시물 편집을 반영하도록 업데이트되었습니다. – Matt

+0

은 문자열의 시작 부분 또는 끝 부분에 있는지 여부를 고려해야합니다. 지금 당장이 일은 실 거예요. – Matt

관련 문제