脚本安装字体powershell
问题描述:
我有一个安装字体的脚本,检查字体是否存在。但是,我无法验证字体的存在。脚本安装字体powershell
$FONTS = 0x14;
$FromPath = "c:\fonts";
$ObjShell = New-Object -ComObject Shell.Application;
$ObjFolder = $ObjShell.Namespace($FONTS);
$CopyOptions = 4 + 16;
$CopyFlag = [String]::Format("{0:x}", $CopyOptions);
foreach($File in $(Get-ChildItem -Path $FromPath)){
If ((Test-Path "c:\windows\fonts\$($File.name)") -eq $False)
{ }
Else
{
$CopyFlag = [String]::Format("{0:x}", $CopyOptions);
$ObjFolder.CopyHere($File.fullname, $CopyOptions);
New-ItemProperty -Name $File.fullname -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -PropertyType string -Value $File
}
}
答
你如果说法是错误的,如果该文件存在,并
If ((Test-Path "c:\windows\fonts\$($File.name)") -eq $False)
Test-Path
回报true
false
,如果它不。所以在这种情况下,文件不存在,你有false -eq false
= true
所以没有执行。只有在复制该项目的代码已经存在时才会被调用。
解决方案:
If (Test-Path "c:\windows\fonts\$($File.name)")
+0
我使用了解决方案,它工作,谢谢! – MeuChapeu 2014-11-04 15:44:02
答
保罗是正确的。基本上你的If条件是倒退的。如果(Test-Path“c:\ windows \ fonts \ $($ File.name)”) 等效于 如果((Test-Path“c:\ windows \ fonts \ $($ File。名称)“)-eq $ True)
两者都可以工作,但第二个不必要地更复杂。
究竟是什么问题? – Paul 2014-11-04 14:38:48
错误在(else)中,会出现一条消息,要求替换现有的字体。这不应该发生,因为(其他)应该安装不存在的字体! – MeuChapeu 2014-11-04 14:45:37