我在获取 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