Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 CSV导出在其中一列中缺少数据_Powershell_Active Directory - Fatal编程技术网

Powershell CSV导出在其中一列中缺少数据

Powershell CSV导出在其中一列中缺少数据,powershell,active-directory,Powershell,Active Directory,我有一个csv文件,这个脚本可以很好地工作 $CCure = Import-csv C:\Scripts\file1.csv ForEach ($user in $CCure) { [string]$1Name = $User.FirstName [string]$2Name = $User.LastName [string]$GivenName = $1Name.Split(" ")[0] [string]$SN = $2Name.Split(",")[0]

我有一个csv文件,这个脚本可以很好地工作

$CCure = Import-csv C:\Scripts\file1.csv

ForEach ($user in $CCure) {

    [string]$1Name = $User.FirstName
    [string]$2Name = $User.LastName
    [string]$GivenName = $1Name.Split(" ")[0]
    [string]$SN = $2Name.Split(",")[0]
    [string]$ID = $User.ObjectID
    [string]$EmpID = $User.Int5 |   
    Select @{Name="First Name";Expression={$GivenName}}, @{Name="Last Name";Expression={$SN}}, @{Name="CCure ObjectID";Expression={$ID}}, @{Name="CCure Int5 Row";Expression={$EmpID}} | 
    Export-csv C:\Scripts\CCure\CCure-Names-Test.csv -Append -notypeinformation
    }
然而,当我尝试一个类似的脚本去广告,并希望使用正则表达式,事情不工作。它似乎挂着,或者当它运行时,姓氏就不见了。为什么第二个不起作用?我一定错过了一些简单的东西

$Users = Get-ADUser -LDAPFilter "(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))" -properties samaccountname,givenname,sn
ForEach ($User in $Users) {

    [string]$1Name = $User.GivenName
    [string]$2Name = $User.SN
    [string]$GivenName = $1Name.Split(" ")[0]
    [string]$SN = $2Name.Split(",")[0] |
    Select @{Name="First Name";Expression={$GivenName}}, @{Name="Last Name";Expression={$SN}},@{Name="SID";Expression={$User.samaccountname}}| Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation -append

}

在第二个示例中,
$sn
将为空。这是因为您使用了尾随管道字符。此问题也出现在
$EmpID
的第一个代码块中。最后一个命令
Export CSV
不向输出流返回任何内容,因此两种情况下的变量都是
$null

您正在获取
$2Name.Split(“,”[0]
的结果,并将其发送到管道中,然后该管道将不用于
选择对象

因此,简单的答案是删除管道字符,这两行现在将分别工作

[string]$SN = $2Name.Split(",")[0] 
Select @{Name="First Name";Expression={$GivenName}}, @{Name="Last Name";Expression={$SN}},@{Name="SID";Expression={$User.samaccountname}}| Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation -append

如果你正在改变属性名称和值,那么也要考虑创建自己的对象。这应该完成同样的事情,更容易阅读并利用管道

$Users = Get-ADUser -LDAPFilter "(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))"
$Users | ForEach-Object {
    $props = @{
        "First Name" = ($_.GivenName).Split(" ")[0]
        "Last Name" = ($_.SurName).Split(",")[0]
        "SID" = $_.samaccountname
    }

    New-Object -TypeName psobject -Property $props    
} | Select-Object "First Name","Last Name",SID |  Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation 
您会注意到,我使用了
$\uu.sunsame
作为所使用的属性名,因为PowerShell AD对象与其LDAP属性名不直接匹配。如果试图访问
$\uxN.SN
,则会得到一个空值
GivenName
姓氏
SID
是默认返回的值集的一部分,因此您无需请求它们

看看AdUser,你会发现:

姓氏-System.String类型的属性,派生自目录属性:sn


如果未填充姓氏或GivenName,您仍然会在这方面出错。如果这将成为一个问题,那么说明这一点将是一个简单的if声明

在第二个示例中,
$sn
将为空。这是因为您使用了尾随管道字符。此问题也出现在
$EmpID
的第一个代码块中。最后一个命令
Export CSV
不向输出流返回任何内容,因此两种情况下的变量都是
$null

您正在获取
$2Name.Split(“,”[0]
的结果,并将其发送到管道中,然后该管道将不用于
选择对象

因此,简单的答案是删除管道字符,这两行现在将分别工作

[string]$SN = $2Name.Split(",")[0] 
Select @{Name="First Name";Expression={$GivenName}}, @{Name="Last Name";Expression={$SN}},@{Name="SID";Expression={$User.samaccountname}}| Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation -append

如果你正在改变属性名称和值,那么也要考虑创建自己的对象。这应该完成同样的事情,更容易阅读并利用管道

$Users = Get-ADUser -LDAPFilter "(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))"
$Users | ForEach-Object {
    $props = @{
        "First Name" = ($_.GivenName).Split(" ")[0]
        "Last Name" = ($_.SurName).Split(",")[0]
        "SID" = $_.samaccountname
    }

    New-Object -TypeName psobject -Property $props    
} | Select-Object "First Name","Last Name",SID |  Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation 
您会注意到,我使用了
$\uu.sunsame
作为所使用的属性名,因为PowerShell AD对象与其LDAP属性名不直接匹配。如果试图访问
$\uxN.SN
,则会得到一个空值
GivenName
姓氏
SID
是默认返回的值集的一部分,因此您无需请求它们

看看AdUser,你会发现:

姓氏-System.String类型的属性,派生自目录属性:sn


如果未填充姓氏或GivenName,您仍然会在这方面出错。如果这将成为一个问题,那么说明这一点将是一个简单的if声明

奇怪的是,我遇到了一个错误,您不能对空值表达式调用方法。在C:\Scripts\CCure\Get AD Names.ps1:6 char:5+$props=@{+~~~~~~~~~~~~~~+CategoryInfo:InvalidOperation:(:)[],RuntimeException+FullyQualifiedErrorId:InvokeMethodOnNull@MarcGel请阅读我的更新答案和调整后的代码。很抱歉。啊…我的广告中有一些空字段。如果你没有,你应该没事。也许我们应该对此负责。@Marggel为我所说的映射添加了一个技术参考。仍然会收到相同的错误。有超过21k个用户对象,所以我使用-properties samaccountname、givenname、sn,但你是说我需要姓氏吗?我也尝试过,但仍然没有成功。我将更改代码以添加更多步骤来帮助我进行调试。奇怪的是,我遇到了一个错误,你无法对空值表达式调用方法。在C:\Scripts\CCure\Get-AD-Names.ps1:6 char:5+$props=@{+~~~~~~~~~~~~~~~~+类别信息:无效操作:(:)[],RuntimeException+FullyQualifiedErrorId:InvokeMethodOnNull@MarcGel请阅读我的更新答案和调整后的代码。很抱歉。啊…我的广告中有一些空字段。如果你没有,你应该没事。也许我们应该对此负责。@Marggel为我所说的映射添加了一个技术参考。仍然会收到相同的错误。有超过21k个用户对象,所以我使用-properties-samaccountname、givenname、sn,但你是说我需要姓氏吗?我也尝试过,但仍然没有成功。我将更改代码以添加更多步骤来帮助我进行调试。