Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell Get ADUser“;“枚举上下文无效”;及;无法联系服务器";错误_Powershell - Fatal编程技术网

PowerShell Get ADUser“;“枚举上下文无效”;及;无法联系服务器";错误

PowerShell Get ADUser“;“枚举上下文无效”;及;无法联系服务器";错误,powershell,Powershell,首先,这是我正在编写的代码: function Scan-Homedirs { [CmdletBinding()] PARAM ($SAN,$UserType) switch ($UserType) { 'Staff' { Import-Csv -Path '\\<path>\<file>.csv' ` | ? {$_.Type -eq 'Staff'} | % { $Path = "\\$($_.Server)\homedir

首先,这是我正在编写的代码:

function Scan-Homedirs
{
[CmdletBinding()]
PARAM ($SAN,$UserType)

switch ($UserType) {
    'Staff' { Import-Csv -Path '\\<path>\<file>.csv' `
                 | ? {$_.Type -eq 'Staff'} | % { $Path = "\\$($_.Server)\homedirs\$SAN"
                                                 if (Test-Path $Path) {
                                                    New-Object -TypeName psobject -Property ([ordered]@{SAN       = $SAN;
                                                                                                        Directory = $Path})
                                                    <#(gci $Path -Recurse | Measure-Object -Property length -Sum).sum
                                                    (gci $Path -Recurse).Count#> }
                                               }
            }

    'Student' { Import-Csv -Path '\\<path>\<file>.csv' `
                   | ? {$_.Type -eq 'Student'} | % { $Path = "\\$($_.Server)\Studirs\"
                                                     gci $Path | ? {$_.PSIsContainer} } | % { if (Test-Path "$Path$($_.Name)\$SAN") {
                                                               $Path = "$Path$($_.Name)\$SAN"
                                                               New-Object -TypeName psobject -Property ([ordered]@{SAN       = $SAN;
                                                                                                                   Directory = $Path})
                                                               <#(gci $Path -Recurse | Measure-Object -Property length -Sum).sum
                                                               (gci $Path -Recurse).Count#> }
                                                     }
              }
                   }
}

$DateMinus6Mo = (Get-Date).AddMonths(-6)
$Dirs = @()
Get-ADUser -ResultPageSize 100000 -Filter {(Enabled -eq 'False') -and (LastLogonDate -lt $DateMinus6Mo)} -Properties LastLogonDate,Description,Title | `
select Surname,GivenName,SamAccountName,Description,Title,LastLogonDate,Enabled | % {
    $Dirs = Scan-Homedirs "$($_.SamAccountName)" $_.Title
    if ($Dirs.Count -ne 0) {
        for ($i=0;$i -lt $Dirs.Count;$i++) {
            New-Object -TypeName psobject -Property ([ordered]@{SAN       = $_.SamAccountName;
                                                                Directory = $Dirs[$i].Directory})
        }
    }
    else { New-Object -TypeName psobject -Property ([ordered]@{SAN       = $_.SamAccountName;
                                                               Directory = "No directories found"})
    }
} | sort -Property SamAccountName | Export-Csv -Path '\\<path>\<file>.csv'
函数扫描Homedirs
{
[CmdletBinding()]
参数($SAN,$UserType)
交换机($UserType){
'Staff'{Import Csv-路径'\\\\.Csv'`
|?{$\.Type-eq'Staff'}{$Path=“\\$($\.Server)\homedirs\$SAN”
if(测试路径$Path){
新对象-TypeName psobject-Property([ordered]@{SAN=$SAN;
目录=$Path})
}
}
}
'Student'{Import Csv-路径'\\\\.Csv'`
|?{$\.Type-eq'Student'}{$Path=“\\$($\.Server)\Studirs\”
gci$Path |?{$\.PSIsContainer}}{if(测试路径“$Path$($\.Name)\$SAN”){
$Path=“$Path$($\ux.Name)\$SAN”
新对象-TypeName psobject-Property([ordered]@{SAN=$SAN;
目录=$Path})
}
}
}
}
}
$DateMinus6Mo=(获取日期).AddMonths(-6)
$Dirs=@()
Get ADUser-ResultPageSize 100000-过滤器{(已启用-eq'False')-和(LastLogonDate-lt$DateMinus6Mo)}-属性LastLogonDate,描述,标题|`
选择姓氏、GivenName、SamAccountName、描述、标题、LastLogonDate、Enabled |%{
$Dirs=扫描Homedirs“$($.SamAccountName)”$\标题
如果($Dirs.Count-ne 0){
对于($i=0;$i-lt$Dirs.Count;$i++){
新对象-TypeName psobject-Property([ordered]@{SAN=$\.SamAccountName;
目录=$Dirs[$i]。目录})
}
}
else{New Object-TypeName psobject-Property([ordered]@{SAN=$\.SamAccountName;
Directory=“未找到目录”})
}
}|排序-属性SamAccountName |导出Csv-路径'\\\\.Csv'
我正在做的是查询AD以获取所有已禁用且上次登录日期为6个月前或更长时间的用户帐户,将输出传输到一个函数,该函数扫描所有文件服务器的HomeDir,然后将这些结果返回到主脚本。我将添加另一个函数来删除HomeDir,但需要确保它首先获取所有帐户。代码正在工作,以提供我想要的结果,因为我已经用小组数据进行了测试。当我注释掉最后一行要排序并导出到csv的内容,并将对象逐行写入控制台时,它也会工作一段时间,但最终会出现“无法联系服务器”的错误,因此就像管道无法一次处理那么多数据,或者PowerShell无法处理,或者诸如此类

如果我启用排序并导出到csv,最初我得到的是“无效枚举上下文”错误,它引用了
Get ADUser
行,因此我做了一些研究,添加了
-ResultPageSize
参数并将其设置为100000。现在我得到了
Get ADUser:cannot contact the server
错误,这很奇怪,因为如果它不能联系服务器,那么当
Export CSV
被注释掉时,为什么它至少部分工作?这不应该是权限问题,因为我使用域管理员凭据运行ISE,并且所有其他与AD交互的脚本都可以正常工作

然后,我尝试在以域管理员帐户登录时在DC上运行脚本,脚本运行了几秒钟,只返回3个对象。我试了另一个DC,得到了同样的结果。这也很奇怪,因为在我的工作站上运行脚本时,它会运行大约10分钟,直到出错


我怀疑这可能是因为它需要处理超过4200个用户帐户。我通过运行
(Get ADUser-Filter{(Enabled-eq'False')-和(LastLogonDate-lt$DateMinus6Mo)}.Count来验证这一点,Count也运行得很好,并返回适当的数字。需要一些帮助才能让它工作

因此,管道似乎无法同时处理我试图塞进其中的所有数据。我修改了代码,将
Get-ADUser
cmdlet中的数据分配给一个变量,然后将变量导入
ForEach
循环,而不是将
Get-ADUser
cmdlet直接导入
ForEach
循环,我获得了所有数据

确认你对4200名用户的怀疑。您是否尝试将4200导出到CSV(仅sAMAccountname)中,然后通过您的函数仅提供500个左右的数据?@lachiewite-如果我只运行
Get ADUser
部分并将其导出到CSV文件中,我将在该文件中返回所有4260个用户,以及所有选定的属性。我还没有试着把它们分为几个小组导入,直到我的假期(1/3/17)结束,我才有时间这么做。