powershell PSCustomObject在多台计算机中检查文件夹

zsbz8rwp  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(109)

我正在尝试检查特定文件夹“appdata\Local\Packages\ActiveSync”是否存在于每个配置文件文件夹中,这些文件夹是由下面的脚本为每台计算机返回的。通过搜索各种论坛,我得到了下面的脚本,并需要进一步的帮助,以最终将其输出到一个文件中,其中包含针对每个计算机名称和相应配置文件路径的测试路径结果。
例如\\Computer1\C:\users\John\appdata\Local\packages\ActiveSync False

Invoke-Command -Computer (get-content c:\temp\servers.txt) -ScriptBlock {
 Get-childItem 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' |
  % {Get-ItemProperty $_.pspath }}  |  Select pscomputername,profileimagepath |
  Where-Object { $_.ProfileImagePath -like "C:\users*" } | Out-File c:\temp\profiles.csv
vc9ivgsu

vc9ivgsu1#

为此,我想我会使用一个循环来遍历所有用户路径字符串,如下所示:

Invoke-Command -ComputerName (Get-Content -Path 'c:\temp\servers.txt') -ScriptBlock {
    $regPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*'
    Get-ItemPropertyValue -Path $regPath -Name 'ProfileImagePath' -ErrorAction SilentlyContinue |
    Where-Object { $_ -like 'C:\Users*' } | ForEach-Object {
        # combine the value with the rest of the path to form a LOCAL path
        $path = Join-Path -Path $_ -ChildPath 'AppData\Local\Packages\ActiveSync'
        [PsCustomObject]@{
            ComputerName = $env:COMPUTERNAME
            Path         = '\\{0}\{1}' -f $env:COMPUTERNAME, ($path.Replace(":", "$"))  # UNC format
            Exists       = Test-Path -Path $path -PathType Container
        }
    }
} | Export-Csv -Path 'c:\temp\profiles.csv' -NoTypeInformation

请注意,如果输出应为结构化CSV文件,则需要对结果对象使用Export-Csv,而不是Out-File
此外,您可能需要将参数-Credential附加到Invoke-Command调用中,以便为其给予管理凭据。

相关问题