Powershell 附加到对象中已存在值的对象
因此,我有以下代码,这是我的spoof数据库创建者的一部分,它可以工作:Powershell 附加到对象中已存在值的对象,powershell,Powershell,因此,我有以下代码,这是我的spoof数据库创建者的一部分,它可以工作: $Start_dateMin = get-date -year 2015 -month 1 -day 1 $Start_dateMax = get-date for ( $i = 0; $i -le (Get-Random -Minimum 1 -Maximum 2); $i++ ) { <# Create job data array #> $jobData = @{ Re
$Start_dateMin = get-date -year 2015 -month 1 -day 1
$Start_dateMax = get-date
for ( $i = 0; $i -le (Get-Random -Minimum 1 -Maximum 2); $i++ ) {
<# Create job data array #>
$jobData = @{
ReceivedDate = (new-object datetime (Get-Random -min $Start_dateMin.ticks -max $Start_dateMax.ticks)).ToString("yyyy/MM/dd")
}
<# Add to job data array #>
$jobData += @{
StartDate = (Get-Date $jobData.ReceivedDate).AddDays((Get-Random -Minimum 20 -Maximum 50)).ToString("yyyy/MM/dd")
EndDate = (Get-Date $jobData.ReceivedDate).AddDays((Get-Random -Minimum 100 -Maximum 500)).ToString("yyyy/MM/dd")
ClosingDate = (Get-Date $jobData.ReceivedDate).AddDays((Get-Random -Minimum 30 -Maximum 100)).ToString("yyyy/MM/dd")
UpdatedDate = (Get-Date $jobData.ReceivedDate).AddDays((Get-Random -Minimum 5 -Maximum 30)).ToString("yyyy/MM/dd")
JobStatusID = if (( Get-Date $jobData.ReceivedDate ) -ge ((Get-Date).AddDays(-100))) { 5 } else { 1 }
}
<# Add to job data array #>
$jobData += @{
jobOutcomeID = if ( $jobData.JobStatusID -eq 1 -and (Get-Random -Minimum 0 -Maximum 100) -lt 70 ) { 1 }
elseif ( $jobData.JobStatusID -eq 1 -and (Get-Random -Minimum 0 -Maximum 100) -lt 85 ) { 2 }
else { (Get-Random -InputObject $JobOutcomeList -count 1).itemArray[0] }
}
}
$jobData | format-table
它正确地使用声明中的接收日期,并基于该日期创建日期
第二段代码不起作用:
for ( $i = 0; $i -lt (Get-Random -Minimum 1 -Maximum 2); $i++) {
$jobCandData = @{
DateSelected = (Get-Date).AddDays((Get-Random -Minimum 1 -Maximum 30)).ToString("yyyy/MM/dd");
JobCanOutcome = 7
}
$jobCandData += @{
CandNote = if ( $jobCandDate.JobCanOutcome -eq 7 ) { "test" };
DateSubmitted = if ((Get-Random -Minimum 1 -Maximum 100) -gt 80) { (Get-Date $jobCandData.DateSelected).AddDays((Get-Random -Minimum 1 -Maximum 30)).ToString("yyyy/MM/dd") };
}
$jobCandData | Format-Table
}
这不起作用,append调用中的所有内容都不会填充,下面是一个示例结果:
Name Value
---- -----
DateSubmitted
CandNote
DateSelected 2018/03/16
JobCanOutcome 7
就我所知没有什么不同。第二段代码在foreach循环中运行,foreach(job in jobs){}
这些作业是从第一段代码创建的。两个变量DateSubmitted和CandNote不包含或不包含此foreach循环
基本上,我只是想了解我在这里遗漏了什么,以及为什么它没有正确填充。这是一个简单的打字错误,第1版(或更高版本)可能会发现它,正如在对问题的评论中建议的那样: Set-StrictMode -Version 1 原始变量名是
$jobCandData
-最后一个a
-但您尝试将其称为$jobCandDate
-最后一个e
默认情况下,在没有严格模式的情况下,引用如$jobCandDate.JobCanOutcome
——即尝试访问不存在的变量的属性只会产生$null
,在您的情况下,这意味着有条件的$jobCandDate.JobCanOutcome-eq 7
始终返回$False
,因此从不为CandNote
哈希表项赋值
相比之下,分配给
DateSubmitted
条目效果很好-只是当(Get Random-Minimum 1-Maximum 100)-gt 80
恰好是$True
时,它才会分配一个值,它的平均值只有19%左右。请考虑提供一个.@ MKLMunt0。我已经修改了代码,因此它不依赖于文件/数据库中的数据。您现在可以运行这两个示例,希望这会使事情变得更简单。顺便说一句,Get Random-Minimum 1-Maximum 2始终返回1
Set StrictMode-Version Latest
将使所有相关错误迎刃而解。@PetSerAi感谢Set StrictMode的提示,这个命令对我来说是新的,看起来在将来会非常有用。
Set-StrictMode -Version 1