Powershell - 设置 "LastWriteTime" 属性 以便文件夹中的每个文件都不同

Powershell - Set the "LastWriteTime" Property so that it's different for each file in a folder

我正在尝试更改多个文件的“LastWriteTime”属性,以便使用随机数使它们不同。我用几个 .txt 文件创建了一个测试文件夹,我正在尝试更改 属性。

这是我目前拥有的:

$path = "D:\Test\Test"
$array = @(Get-ChildItem -Path $path)
for($i = 0; $i -le $array.Count; $i++)
{
    $randomNumber = Get-Random -Minimum 10 -Maximum 50
    $array[$i].LastWriteTime = (Get-Date).AddMinutes($randomNumber)
}

错误消息指出:

“在此对象上找不到 属性 'LastWriteTime'。”

但是一旦我在 Powershell ISE 中拥有 运行 script/selection 并将数组存储在内存中,我就可以单独更改数组的成员,而无需使用戏剧:

$randomNumber = Get-Random -Minimum 10 -Maximum 50
$array[1].LastWriteTime = (Get-Date).AddMinutes($randomNumber)

谁能指出为什么我不能使用 for 循环更改数组成员?

我在 Powershell7 上测试了您的脚本,三个文件中有一个文件出错。有趣的是,日期正在按照所有人的预期进行更改。可能是此模块的错误。

还有一点就是如果我们用For each代替For.

就不会出现这个错误
$path = "C:\temp"
$array = @(Get-ChildItem -Path $path -Recurse)

Write-Host Before For each
$array | Select Name, LastWriteTime
$array |ForEach-Object {
 $_.LastWriteTime = Get-Date
}

Write-Host After For each
$array | Select Name, LastWriteTime