Azure 提取最近的活动/登录日期

Azure 提取最近的活动/登录日期,azure,powershell,Azure,Powershell,我正在从我们的Azure门户中提取计算机,我专门寻找在120天内没有任何活动的设备 问题:每次我提取此信息时,它只提供设备初始注册的活动/登录 我们的一些设备在用户之间传递时有多个注册 所以当我提取信息时,它是不准确的 我使用了下面我认为应该可以工作的设备,但我仍然得到比我的目标日期更新的设备。我在运行脚本时也看到了一个错误,我使用的代码下面包含了这个脚本 有人能帮我吗?我觉得我很亲近 clear-host $maxDate = Get-Date '6/1/19' #Create a has

我正在从我们的Azure门户中提取计算机,我专门寻找在120天内没有任何活动的设备

问题:每次我提取此信息时,它只提供设备初始注册的活动/登录

我们的一些设备在用户之间传递时有多个注册

所以当我提取信息时,它是不准确的

我使用了下面我认为应该可以工作的设备,但我仍然得到比我的目标日期更新的设备。我在运行脚本时也看到了一个错误,我使用的代码下面包含了这个脚本

有人能帮我吗?我觉得我很亲近

clear-host

$maxDate = Get-Date '6/1/19'

#Create a hash table to remove dupes
$set = @{}

#create our final array
$cleanSet = @()

#load data
$data = Get-MsolDevice -All | select-object -Property ObjectID, ApproximateLastLogonTimestamp, DisplayName

#for each item in the pipeline, add it to our hash table
foreach($_ in $data) {

    #if the item isn't in the hash table, add it
    if(!$set.Contains($_.ObjectID)) {
        $set.Add($_.ObjectID, $_)
    }
    else {
        #if we have a more recent date for the item, update the date so we only have the most recent one
        if((Get-Date $_.ApproximateLastLogonTimestamp) -gt (Get-Date $set[$_.ObjectId].ApproximateLastLogonTimestamp)) {
            $set[$_.ObjectID].ApproximateLastLogonTimestamp = $_.ApproximateLastLogonTimestamp
        }
    }
}

#now that we have the most recent date for each item, remove ones newer than our target date.
$set.GetEnumerator() | ForEach-Object{
    if((get-date $_.Value.ApproximateLastLogonTimestamp) -lt $maxDate) {
        $cleanSet +=  $_.Value
    }
}

$cleanSet | select-object -Property ObjectID, DisplayName | export-csv "C:\Users\tesyuser\Desktop\Project Work\Stale machine on Azure\Exported CSV\2HIE-Stale-Device-List.csv" -NoTypeInformation
错误

获取日期:无法将参数“日期”绑定到目标。例外情况 正在设置“日期”:“无法将null转换为类型”System.DateTime“ 行:29字符:18


嗨,我的代码现在应该是这样的

$maxDate=获取日期'6/1/19'
#创建哈希表以删除重复项
$set=@{}
#创建我们的最终阵列
$cleanSet=@()
#加载数据
$data=Get MsolDevice-All | select object-Property ObjectID,ApproximateLastLogonTimestamp,DisplayName
#对于管道中的每个项目,将其添加到哈希表中
$data | ForEach对象{..}{
#如果该项不在哈希表中,请添加它
如果(!$set.Contains($\u.ObjectID)){
$set.Add($\.ObjectID,$\)
}
否则{
#如果我们有项目的最新日期,请更新该日期,以便我们只有最新的日期
if((获取日期$\.ApproximateLastLogonTimestamp)-gt(获取日期$set[$\.ObjectId].ApproximateLastLogonTimestamp)){
$set[$\u0.ObjectID].ApproximateLastLogonTimestamp=$\u0.ApproximateLastLogonTimestamp
}
}
}
#现在我们有了每个项目的最新日期,删除比目标日期更新的项目。
$set.GetEnumerator()| ForEach对象{
if((获取日期$0.Value.ApproximateLastLogonTimestamp)-lt$maxDate){
$cleanSet+=$\值
}
}

$cleanSet |为管道中的每个项目选择对象-属性ObjectID,显示名称|导出csv“C:\Users\Birreld\Desktop\Project Work\Azure上的过时机器\Exported csv\3IE Stale Device List.csv”-NoTypeInformation
”,但您不使用管道。。执行
$data | ForEach对象{..}
而不是
ForEach($in$data){..}
$\uu
是一个自动变量,您不能像在foreach循环中使用自己的变量一样使用它。您好,对不起,我不确定是否遵循了。我对所有这些变化都是比较陌生的
foreach($in$data){
$data | foreach对象{
请不要将此作为答案发布,而是用更新的代码发布您的问题。另外,我在注释
{..}中使用的点
不是字面意思。它们只是指代码的其余部分。另外,请删除
废话,因为这是PowerShell,而不是javascript或htmlApologies。我现在明白了。谢谢Theo。好的,我已经按照您的建议运行了代码,它输出文件时没有错误。我检查的第一台机器几天前有一个登录日期。所以它仍然在生成目标日期之后登录的机器的结果。回到绘图板上看。@Daniel Birrell你能给我发封电子邮件吗?niftylettuce@gmail.com-我在任何地方都找不到你的电子邮件地址