将.csv值传递给Powershell中的脚本

时间:2014-02-06 22:45:56

标签: python powershell csv

我一直在使用一个几乎完全符合我需要它的脚本。它将占用驱动器共享路径,获取访问控制列表,并将其导出到.csv文件以供以后编辑。我的问题是我无法弄清楚如何将多个驱动器路径值传递给脚本。我想使用.txt或.csv文件将共享提供给脚本,让它在一夜之间运行。原始站点表示在命令行分配变量,并使用此命令:

$allServersVariable -FilePath C:\Scripts\MyPermissionsScript.ps1 -ArgumentList "E:\list" | Export-Csv C:\Scripts\ScanResults.csv –NoTypeInformation

但是我无法使用此命令。但是,我可以执行以下操作,并一次处理一个共享:

.\MyPermissionsScript.ps1 \\\192.168.1.1\SharedFiles | Export-Csv C:\Scripts\ScanResults.csv -NoTypeInformation

这是脚本:

function Get-PathPermissions {

param ( 
        [Parameter(Mandatory=$true)] 
        [System.String]${Path}
    )

    begin {
    $root = Get-Item $Path
    ($root | get-acl).Access | Add-Member -MemberType NoteProperty -Name "Path" -Value $($root.fullname).ToString() -PassThru
    }
    process {
    $containers = Get-ChildItem -path $Path -recurse | ? {$_.psIscontainer -eq $true}
    if ($containers -eq $null) {break}
        foreach ($container in $containers)
        {
        (Get-ACL $container.fullname).Access | format-list -property Path, AccessToString
        }
    }
}
Get-PathPermissions $args[0]

这让我发疯了。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

最简单的方法是:

Get-Content C:\PathToInputFile.txt | ForEach-Object { .\MyPermissionsScript.ps1 $_ } | Export-Csv C:\Scripts\ScanResults.csv -NoTypeInformation

Get-Content以文件形式读取文件内容。然后,它将为数组的每个元素调用脚本,并将所有输出导出到文件中。

但是,如果要导出为CSV,我会从您的函数中删除Format-List。它将结果转换为字符串而不是对象,而Export-Csv则期望对象。如果您只想选择这些属性,请使用Select-Object而不是Format-List。