在.csv中过滤和导出数据

时间:2017-11-16 08:52:44

标签: powershell csv registry

我需要一些指令来滚动服务器列表,远程编辑每个服务器的一些注册表项,并将每个注册表项更新的输出保存在.csv文件中。 我尝试了我的脚本,它们似乎工作但是我无法过滤结果并且只保存(并且确切地)我在.csv中需要的内容:

脚本1:

$Invocation = (Get-Variable MyInvocation -Scope 0).Value
$LocalDir = Split-Path $Invocation.MyCommand.Path
$Computers = Get-Content $LocalDir'\HostsList.txt'
$Results = foreach ($Computer in $Computers) {
    Invoke-Command -ComputerName $Computer -FilePath $LocalDir'\autologon_editor.ps1' -ArgumentList $Computer
}
$Results | Export-Csv -NoTypeInformation -Path $LocalDir'\ResultsAutologon.csv'

脚本2:

Param(
    [Parameter(Mandatory=$true,
    ValueFromPipeline=$true)]
    [string[]]$Computer
)
$Path = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
$Property1 = 'DefaultUserName'
$Property2 = 'DefaultPassword'
$Value1 = 'NewUserName-new4'
$Value2 = 'NewPassword-new4'
if (Test-Connection -ComputerName $Computer -Count 1 -Quiet) {
    try {
        Set-ItemProperty -Path $Path -Name $Property1 -Value $Value1 -ErrorAction 'Stop'
        Set-ItemProperty -Path $Path -Name $Property2 -Value $Value2 -ErrorAction 'Stop'
        $Status = 'Username and password set ok'
    } catch {
        $Status = 'Username or password set ko'
    }
} else {   
    $Status = 'Unreachable'
}
Get-ItemProperty -Path $Path
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True
$Properties = @{            
    'Computer' = $Computer;
    'Status'   = $Status         
}
$Record = New-Object -TypeName PSObject -Property $Properties

问题

我的过滤器无效:.csv不包含“计算机”和“状态”字段,但以下列表:

  

“Userinit”,“LegalNoticeText”,“Shell”,“LegalNoticeCaption”,“DebugServerCommand”,“ForceUnlockLogon”,“ReportBootOk”,“VMApplet”,“AutoRestartShell”,“PowerdownAfterShutdown”,“ShutdownWithoutLogon”,“背景” ,“PreloadFontFile”,“PasswordExpiryWarning”,“CachedLogonsCount”,“WinStationsDisabled”,“PreCreateKnownFolders”,“DisableCAD”,“scremoveoption”,“ShutdownFlags”,“AutoLogonSID”,“LastUsedUsername”,“DefaultUserName”,“DefaultPassword”,“ PSPath“,”PSParentPath“,”PSChildName“,”PSDrive“,”PSProvider“,”PSComputerName“,”RunspaceId“,”PSShowComputerName“

2 个答案:

答案 0 :(得分:2)

脚本2(我假设是autologon_editor.ps1)当前没有输出$Record。但是我怀疑它是从这个命令返回输出:

Get-ItemProperty -Path $Path

我不确定是否需要。

我建议删除上面的命令,然后将脚本的结尾修改为:

RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True
$Properties = @{            
    'Computer'=$Computer;
    'Status'=$Status         
}                                       
New-Object -TypeName PSObject -Property $Properties

这会将New-Object命令(对象)的结果返回给管道,而管道又会使它成为Invoke-Command的输出。

答案 1 :(得分:0)

有关常见解决方案,请参阅Union-Object Not all properties displayed

$Results | Union | Export-Csv -NoTypeInformation -Path $LocalDir'\ResultsAutologon.csv