PowerShell 脚本无法将位置设置为 8.3 文件名临时位置

PowerShell 脚本无法将位置设置为 8.3 文件名临时位置

我在获取 Server 2016 上的 Windows 更新日志时遇到了问题。如记录所述这里Server 2016 现在以不同的方式记录 Windows 更新日志,要查看日志,您需要从名为 Get-WindowsUpdateLog 的 WindowsUpdate 模块运行 Powershell 命令。

该脚本需要设置符号缓存,它通过运行来完成此操作'Set-Location $SYM_CACHE'。符号缓存变量在本文前面通过以下方式设置:

$WORKDIR = "$env:TEMP\WindowsUpdateLog"
$SYM_CACHE = "$WORKDIR\SymCache"

我遇到的问题是我的管理用户名是“secur.tima”,临时变量是使用 8.3 文件名版本设置的,即“C:\Users\SECUR~1.TIM\AppData\Local\Temp\4”

当脚本尝试将其设置为位置时,它会失败并出现以下错误:

Set-Location : An object at the specified path C:\Users\SECUR~1.TIM does not exist.
At 

    C:\Windows\system32\WindowsPowerShell\v1.0\Modules\WindowsUpdate\WindowsUpdateLog.psm1:194 char:5
    +     Set-Location $SYM_CACHE
    +     ~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Set-Location], PSArgumentException
        + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetLocationCommand

我在 StackOverflow 上发现了这一点:https://stackoverflow.com/questions/10782739/how-to-change-to-temp-directory-in-powershell

但是,这显示了如何通过更改脚本来解决问题。虽然我可以更改 Microsoft 提供的脚本,但我想知道是否有某种方法可以从服务器端完成这项工作或更改 PowerShell 处理 8.3 文件名的方式?

干杯

蒂姆

答案1

获取 8.3 文件名的长版本并使用它。可以:

$WORKDIR = (Get-Item "$env:TEMP\WindowsUpdateLog").FullName
$SYM_CACHE = "$WORKDIR\SymCache"

或者:

Set-Location (Get-Item $SYM_CACHE).FullName

您可以在以下位置阅读有关此解决方法的更多信息我在 SU 上的回答

答案2

technet 文章似乎表明 PowerShell 不理解 8.3 文件名。

答案3

制作一个批处理文件,将 CD 放到临时目录,然后从批处理文件中调用 powershell 脚本?

cd %temp%\windowsupdatelog
powershell.exe -f c:\dirname\script.ps1

相关内容