2017-05-03 115 views
0

我試圖編輯我在網上找到的腳本。它最初編寫爲掃描單個用戶帳戶的Chrome擴展。我想將其更改爲掃描該計算機上的計算機和所有用戶帳戶的列表。當它掃描我得到一個錯誤的擴展路徑。PowerShell Foreach和管道

CODE:

foreach($computer in $computers){ 

    $User = Get-Content -Path "\\$computer\C$\Users" 
    Get-ChildItem $User | ForEach-Object { 
     Write-Host Scanning $computer 


     ##: The extensions folder is in local appdata 
     $extension_folders = Get-Content -Path "\\$computer\c$\users\$user\AppData\Local\Google\Chrome\User Data\Default\Extensions\" 
     Get-ChildItem $extension_folders |ForEach-Object { 

      ##: Get the version specific folder within this extension folder 
      $version_folders = Get-ChildItem -Path "$($extension_folder.FullName)" 

       ##: Loop through the version folders found 
       foreach ($version_folder in $version_folders) { 

       ##: The extension folder name is the app id in the Chrome web store 
       $appid = $extension_folder.BaseName 

錯誤:

Get-Content : Cannot find path 
'\\gms-404-01S\c$\users\\AppData\Local\Google\Chrome\User 
Data\Default\Extensions\' because it does not exist. 
At C:\Users\clarkj8\Desktop\Untitled4.ps1:26 char:30 

它不拉用戶變量像我所希望的。完成extension_folder變量所需的路徑。任何幫助將不勝感激。

完整的代碼大部分是不是我的

$folder = "\\SERVER\PowershellScans\ExtensionList\" 
$hostnamestxt = "\\SERVER\PowershellScans\404.txt" 
$computers = get-content 「$hostnamestxt」 


if(!(Test-Path $folder)){ 
    New-Item "\\gmsms01\PowershellScans\ExtensionList\list.txt" -type directory -force 


} 


Write-Host 「Scanning for Extensions" 



foreach($computer in $computers){ 

    $User = Get-Content -Path "\\$computer\C$\Users" 
    Get-ChildItem $User | ForEach-Object { 
     Write-Host Scanning $computer 


     ##: The extensions folder is in local appdata 
     $extension_folders = Get-Content -Path "\\$computer\c$\users\$user\AppData\Local\Google\Chrome\User Data\Default\Extensions\" 
     Get-ChildItem $extension_folders |ForEach-Object { 

      ##: Get the version specific folder within this extension folder 
      $version_folders = Get-ChildItem -Path "$($extension_folder.FullName)" 

       ##: Loop through the version folders found 
       foreach ($version_folder in $version_folders) { 

       ##: The extension folder name is the app id in the Chrome web store 
       $appid = $extension_folder.BaseName 

        ##: First check the manifest for a name 
        $name = "" 
        if((Test-Path -Path "$($version_folder.FullName)\manifest.json")) { 
         try { 
         $json = Get-Content -Raw -Path "$($version_folder.FullName)\manifest.json" | ConvertFrom-Json 
         $name = $json.name 
         } catch { 
         #$_ 
         $name = "" 
         } 
        } 

       ##: If we find _MSG_ in the manifest it's probably an app 
       if($name -like "*MSG*") { 
        ##: Sometimes the folder is en 
        if(Test-Path -Path "$($version_folder.FullName)\_locales\en\messages.json") { 
         try { 
         $json = Get-Content -Raw -Path "$($version_folder.FullName)\_locales\en\messages.json" | ConvertFrom-Json 
         $name = $json.appName.message 
         ##: Try a lot of different ways to get the name 
          if(!$name) { 
          $name = $json.extName.message 
          } 
          if(!$name) { 
          $name = $json.extensionName.message 
          } 
          if(!$name) { 
          $name = $json.app_name.message 
          } 
          if(!$name) { 
          $name = $json.application_title.message 
          } 
         } catch { 
         #$_ 
         $name = "" 
         } 
        } 
      ##: Sometimes the folder is en_US 
      if(Test-Path -Path "$($version_folder.FullName)\_locales\en_US\messages.json") { 
       try { 
        $json = Get-Content -Raw -Path "$($version_folder.FullName)\_locales\en_US\messages.json" | ConvertFrom-Json 
        $name = $json.appName.message 
        ##: Try a lot of different ways to get the name 
        if(!$name) { 
         $name = $json.extName.message 
        } 
        if(!$name) { 
         $name = $json.extensionName.message 
        } 
        if(!$name) { 
         $name = $json.app_name.message 
        } 
        if(!$name) { 
         $name = $json.application_title.message 
        } 
       } catch { 
        #$_ 
        $name = "" 
       } 
      } 
     } 

     ##: If we can't get a name from the extension use the app id instead 
     if(!$name) { 
      $name = "[$($appid)]" 
     } 

     ##: App id given on command line and this one matched it 
     if($ExtensionId -and ($appid -eq $ExtensionId)) { 
      if($Remove) { 
       echo "Removing item: [$appid] at path: [$($extension_folder.FullName)]" 
       if(!($WhatIf)) { 
        ##: Remove the extension folder 
        if (Test-Path -Path $extension_folder.FullName) { 
         Remove-Item -Path $extension_folder.FullName -Recurse -Force    
        } 

        ##: Remove the extension registry key 
        if (Test-Path -Path "HKCU:\SOFTWARE\Google\Chrome\PreferenceMACs\Default\extensions.settings") { 
         if(Get-ItemProperty -Name "$appid" -Path "HKCU:\SOFTWARE\Google\Chrome\PreferenceMACs\Default\extensions.settings") { 
          Remove-ItemProperty -Name "$appid" -Path "HKCU:\SOFTWARE\Google\Chrome\PreferenceMACs\Default\extensions.settings" 
         } 
        } 
       } 
      } else { 
       ##: Dump to a file 
       echo "Appending: [$name ($($version_folder)) - $appid] to audit file: [$auditfilepath]" 
       if(!($WhatIf)) { 
        echo "$name ($($version_folder)) - $appid" | Out-File -Append $auditfilepath 
       } 
       ##: Exit with a TRUE value if the given extension id was found 
       $retval = $true 
      } 

     ##: App id given on command line and this did NOT match it 
     } elseif($ExtensionId -and ($appid -ne $ExtensionId)) { 
      ##: NOP 
      #echo "Skipping: [$appid] output" 
     ##: App id not given on command line 
     } else { 
      ##: Dump to audit file 
      echo "Appending: [$name ($($version_folder)) - $appid] to audit file: [$auditfilepath]" 
      if(!($WhatIf)) { 
       echo "$name ($($version_folder)) - $appid" | Out-File -Append "\\gmsms01\PowershellScans\ExtensionList\list.txt" 
      } 
     } 

    } 

} 
} 
} 
+0

我覺得你想''_''而不是'$ user'在錯誤被拋出的行中。 –

+0

似乎已經做到了。謝謝 –

回答

1

每上面我的意見,在拋出該錯誤會導致你的循環工作,你想要的方式符合$_更換$user

+0

它現在是「工作」,但似乎不僅僅是擴展文件夾的掃描。有什麼機會可以看到是什麼導致了這個錯誤?沒有顯示錯誤。但是它的寫入比最終文件要多得多。 –

+0

這就是爲什麼你應該徹底理解PowerShell並且能夠分析腳本 - 這是一個相當「深刻」的腳本,並且尋找許多關於擴展的信息。 「手動執行」腳本「;這樣,您將看到它在做什麼以及爲什麼,然後可以對其進行修改以減少產生的不需要的數據量。 –