我创建了一个脚本,将pst文件重命名为acl owner。有用。我唯一的问题是当同一个文件夹中有两个pst文件。它给它们相同的名称。如何在脚本中添加增量。它与Si = 1和Si ++相关,但没有结果。
这是我的剧本:
Get-ChildItem C:\Users\tester\* -Filter *.pst -recurse |
ForEach-Object{
$owner = ( $_ | Get-Acl ).Owner.Split("\")[1]
$newname = "$owner.pst"
$_ | Rename-Item -NewName $newname -Verbose -WhatIf
}
答案 0 :(得分:1)
通过添加已用于数组的名称并在每次循环时进行检查,这是一种快速而快速的解决方法。
$increment = 1
$alreadyProcessed = @()
Get-ChildItem C:\Users\tester\* -Filter *.pst -recurse |
ForEach-Object{
$owner = ( $_ | Get-Acl ).Owner.Split("\")[1]
$newname = "$owner.pst"
if($alreadyProcessed.Contains($newName))
{
$newName = "$owner`$increment.pst"
$increment++
}
$alreadyProcessed += $newname
$_ | Rename-Item -NewName $newname -Verbose -WhatIf
}
每次都会确保一个唯一的名称。
答案 1 :(得分:0)
如果您计划在同一个地方多次运行脚本,那么您应该检查可用的名称,否则您的计数器将重置为1,但这些文件已经存在。
function Get-NextName ($file) {
$existing = (Get-Item "$file.*").Name
$i = 1
while ($existing -contains "$file.$i") {
$i++
}
"$file.$i"
}
然后调整你的功能:
Get-ChildItem C:\Users\tester\* -Filter *.pst -recurse |
ForEach-Object{
$owner = ( $_ | Get-Acl ).Owner.Split("\")[1]
$newname = Get-NextName "$owner.pst"
$_ | Rename-Item -NewName $newname -Verbose -WhatIf
}