从我的剧本开始,我就被困住了:
我收到一个CSV列表,其中包含Intune和Azure中的AAD中的一些PC名称。从这个列表中,我想知道哪台PC有哪些所有者。
Connect-AzureAD
$csv = Import-Csv C:\Tools\chatelet.csv
$ObjectID=@()
foreach ($DisplayName in $csv){
$DisplayName
$ObjectID1 = get-AzureADDevice -Filter "DisplayName eq $DisplayName" | Select ObjectID | ft -HideTableHeaders
$ObjectID1
$objectID += $ObjectID1
}
$ObjectID
$ObjectID | Out-File -encoding UTF8 'C:\Tools\BulkObjectID.csv'
$csv2 = Import-Csv C:\Tools\BulkObjectID.csv
$Owners=@()
foreach ($UPN in $csv2){
$DisplayName
$Owners1 = Get-AzureADDeviceRegisteredOwner -ObjectId $UPN |select mail
$Owners1
$Owners += $Owners1
}
$Owners | Out-File -encoding UTF8 'C:\Tools\Owners.csv'
我收到了这个错误:
get-AzureADDevice : Error occurred while executing GetDevices
Code: Request_BadRequest
Message: Syntax error: character '{' is not valid at position 16 in 'DisplayName eq @{DisplayName=SUS-5CG1027Z61}'.
RequestId: d102bfb2-b991-4fd7-afc7-a78de251662c
DateTimeStamp: Thu, 04 Nov 2021 07:42:04 GMT
HttpStatusCode: BadRequest
HttpStatusDescription: Bad Request
HttpResponseStatus: Completed
Au caractère Ligne:5 : 18
+ ... ObjectID1 = get-AzureADDevice -Filter "DisplayName eq $DisplayName" | ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-AzureADDevice], ApiException
+ FullyQualifiedErrorId : Microsoft.Open.AzureAD16.Client.ApiException,Microsoft.Open.AzureAD16.PowerShell.GetDevice
1条答案
按热度按时间zour9fqk1#
使用
Import-Csv
导入CSV文件时,即使CSV文件只有一列,结果也是一个由对象组成的数组。这意味着您需要重写以下代码:
进入:
正如你可能已经注意到的,我已经
$DisplayName
改为$item
,表示每一项都有一个属性,称为DisplayName
$($item.DisplayName)
中使用子表达式ft -HideTableHeaders
,因为Format-Table是仅用于显示目的,如果需要进一步处理结果,则不应使用+=
的数组连接,因为这耗费时间和内存(在每次迭代时,必须在内存中重新创建完整数组),而只需在变量$ObjectID
中捕获Foreach循环的结果这同样适用于代码的第二部分。将其替换为:
在这里,由于您是从前面的循环重新加载CSV(实际上这并不是必需的,因为您在内存中的变量
$ObjectID
中仍有该信息),因此您需要使用正确的头文件,因此ObjectID
而不是UPN
。最后,不要使用
Out-File
创建CSV文件。使用和
取而代之的是。