我已經使用這個腳本大約一年了,似乎 22 年的任何值都沒有被視為大于當前的 21 年......我格式不正確嗎?csv 檔案只是一個用戶名,MM/DD/YY 格式。由于日期是明年而無法作業的腳本的特定部分是: if($today -lt $EndDate)... 似乎可以相對作業幾個月和幾天,但不是幾年?
在我的測驗檔案中,我有一個用戶的日期為 01/03/22,腳本說日期已經結束(意味著 $today 不小于 $enddate 值,實際上是明年)
任何指標?
$Import_csv = Import-Csv -Path "C:\temp\namesanddates.csv"
# Get today's date
$today = Get-Date -format MM/dd/yy
# Begin import csv process
$Import_csv | ForEach-Object {
# Retrieve DN of User
$UserDN = (Get-ADUser -Identity $_.Name).distinguishedName
# Error check missing date - set to tomorrow
$EndDate = (Get-Date).AddDays(1).ToString("MM/dd/yy")
# Try to use date entered from file
$EndDate = (Get-Date $_.date).toString("MM/dd/yy")
Write-Host "Current User:" $UserDN
Write-Host "End Date in file:" $EndDate
if($today -lt $EndDate){
Write-Host "User affected:" $UserDN
Write-Host "Moving Accounts....." $UserDN
}else{
Write-Output "User account date ended for:" $UserDN
}
}
Write-Host "Script Complete"
更新:感謝大家的反饋 - 通過取出 .toString 轉換并排除任何格式 - Powershell 似乎無需干預即可正確匯入日期,然后比較有效。但是 - 如果我在代碼中保留“-format MM/dd/yy”,則小于比較仍然失敗。兩個變數都顯示為帶有 | 的日期時間 % gettype - 但它仍然說 01/03/22 小于今天的日期。
我將我的代碼更改為以下代碼,現在它似乎可以正常作業了 - 似乎“格式”選項正在破壞 -lt 比較。
$Import_csv = Import-Csv -Path "C:\temp\namesanddates.csv"
# Get today's date
$today = Get-Date
# Begin import csv process
$Import_csv | ForEach-Object {
# Retrieve DN of User
$UserDN = (Get-ADUser -Identity $_.Name).distinguishedName
# Error check missing date - set to today
$EndDate = $today
# Try to use date entered from file
$EndDate = Get-Date $_.date
Write-Host "Current User:" $UserDN
Write-Host "End Date in file:" $EndDate
if($today -lt $EndDate){
Write-Host "User affected:" $UserDN
Write-Host "Moving Accounts....." $UserDN
}else{
Write-Output "User account date ended for:" $UserDN
}
}
Write-Host "Script Complete"
uj5u.com熱心網友回復:
正如其他人提到的,這里的問題是您將日期物件 ($today) 與字串 ($EndDate) 進行比較
你需要修改它如下
Import_csv = Import-Csv -Path "C:\temp\namesanddates.csv"
# Get today's date
$today = Get-Date -format MM/dd/yy
# Begin import csv process
$Import_csv | ForEach-Object {
# Retrieve DN of User
$UserDN = (Get-ADUser -Identity $_.Name).distinguishedName
# use date entered from file
EndDate = Get-Date $_.date
Write-Host "Current User:" $UserDN
Write-Host "End Date in file: $($EndDate.toString("MM/dd/yy"))"
if($today -lt $EndDate){
Write-Host "User affected:" $UserDN
Write-Host "Moving Accounts....." $UserDN
}
else{
Write-Output "User account date ended for:" $UserDN
}
}
Write-Host "Script Complete"
uj5u.com熱心網友回復:
作為字串,這是有道理的。要做的一件事是在比較中讓左側為日期時間型別,右側將自動轉換。
$today = Get-Date # 12/24/21
$today | % gettype
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DateTime System.ValueType
$today -lt '01/03/22'
True
通常人們使用這樣的日期字串,可以排序:
Get-Date -format yyyy/MM/dd
2021/12/24
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/393503.html
