2014-03-13 184 views
2

当我在powershell中运行此代码时,出现一个错误,指出找不到与参数名'目录'匹配的参数?任何想法有什么不对?谢谢找不到与参数名'目录'相匹配的参数

$Output = @() 
$DirList = GCI \\server\share -directory | %{$_.FullName; GCI $_ -Directory|select -expandproperty FullName} 
ForEach($Dir in $DirList){ 
    [email protected]() 
    (get-acl $Dir).accesstostring.split("`n")|?{$_ -match "^(.+?admin(istrators|141))\s+?(\w+?)\s+?(.+)$"}|%{ 
     $ACLs+=[PSCUSTOMOBJECT]@{Group=$Matches[1];Type=$Matches[2];Access=$Matches[3]} 
    } 
    ForEach($ACL in $ACLs){ 
     if($Members){Remove-Variable Members} 
     $Members = Get-ADGroupMember $ACL.Group -ErrorAction SilentlyContinue|%{[string]$_.SamAccountName} 
     $Output += "$Dir $($ACL.Group) $($ACL.Access) $($Members -join ",")" 
    } 
} 

回答

3

问题出现在$DirList = GCI \\server\share -directoryGCI $_ -Directory Get-ChildItem cmdlet不支持-directory参数(编辑:版本3之前)。

看起来您正在尝试获取并处理网络文件共享中的每个顶级目录条目。这可以实现如下:

 
Get-ChildItem -path \\server\share | 
    Where-Object { $_.PSIsContainer } | 
    ForEach-Object { 

     Write-host $_.FullName 

     # processing code here 

    } 
+1

这是不正确的。 'Get-ChildItem' cmdlet确实有一个'-Directory'参数,但它在3.0版之前不可用。 –

+1

已更新。谢谢Trevor。 – andyb

+0

谢谢,我正在尝试为每个文件夹获取安全组。我只需要以-W及其成员结尾的安全组 – user1342164

2

您需要的PowerShell 3.0版在最低限度,以支持对Get-ChildItem cmdlet上的-Directory参数。如果您使用的是Windows 7,则可以在安装Microsoft .NET Framework 4.5.1后升级到Windows Management Framework Core 4.0。