1

尝试将更新的快捷方式复制到通配符路径。当我在本地机器上的测试场景中运行代码时,该代码有效:

$Source1 = "C:\Temp\Updated Shortcut\MyShortcut.lnk"
$destination1 = "C:\Temp\Users\*\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\MyShortcut.lnk"
Get-ChildItem -Path $destination1 | ForEach-Object { Copy-Item -Path $Source1 -Destination $_.DirectoryName }

但是针对生产目标路径运行它不起作用:

$Source1 = "C:\Temp\Updated Shortcut\MyShortcut.lnk"
$destination1 = "U:\Users\*\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\MyShortcut.lnk"
Get-ChildItem -Path $destination1 | ForEach-Object { Copy-Item -Path $Source1 -Destination $_.DirectoryName }

如果我删除通配符并使用实际路径,它也会起作用:

$Source1 = "C:\Temp\Updated Shortcut\MyShortcut.lnk"
$destination1 = "U:\Users\JohnSmith\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\MyShortcut.lnk"
Get-ChildItem -Path $destination1 | ForEach-Object { Copy-Item -Path $Source1 -Destination $_.DirectoryName }

U:\Users 文件夹确实包含 1181 个文件夹(每个 1181 个用户一个),所以不确定这是否也可能是一个问题?

4

1 回答 1

6

仅仅因为代码可以写在一行或使用管道,并不意味着代码易于调试或维护。

分解你的代码,调试它,添加一些日志,等等。

$Source1 = "C:\Temp\Updated Shortcut\MyShortcut.lnk"
$destination1 = "U:\Users\*\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\MyShortcut.lnk"
$items = Get-ChildItem -Path $destination1

Write-Verbose "Number of items: $($items.Count)" -Verbose

foreach ($item in $items)
{
    Write-Verbose "Item: $item" -Verbose
    # use -Force here? Does $_ have a DirectoryName property?
    #
    #Copy-Item -Path $Source1 -Destination $_.DirectoryName

    Copy-Item -Path $Source1 -Destination $item -Force -WhatIf
}

我的猜测是,一旦您开始查看诊断程序,您将很快隔离问题。

于 2016-03-17T02:34:37.653 回答