脚本安装字体powershell

脚本安装字体powershell,powershell,fonts,Powershell,Fonts,我有一个脚本,在检查字体是否存在后安装字体。但是,我在验证字体是否存在时遇到问题 $FONTS = 0x14; $FromPath = "c:\fonts"; $ObjShell = New-Object -ComObject Shell.Application; $ObjFolder = $ObjShell.Namespace($FONTS); $CopyOptions = 4 + 16; $CopyFlag = [String]::Format("{0:x}", $CopyOption

我有一个脚本,在检查字体是否存在后安装字体。但是,我在验证字体是否存在时遇到问题

$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陈述是错误的

If ((Test-Path "c:\windows\fonts\$($File.name)") -eq $False)
testpath
如果文件存在,则返回
true
;如果文件不存在,则返回
false
。因此,在文件不存在的情况下,您有
false-eq false
=
true
,因此不会执行任何操作。仅当项目已存在时,才会调用用于复制该项目的代码

解决方案:

If (Test-Path "c:\windows\fonts\$($File.name)")

你的if陈述是错误的

If ((Test-Path "c:\windows\fonts\$($File.name)") -eq $False)
testpath
如果文件存在,则返回
true
;如果文件不存在,则返回
false
。因此,在文件不存在的情况下,您有
false-eq false
=
true
,因此不会执行任何操作。仅当项目已存在时,才会调用用于复制该项目的代码

解决方案:

If (Test-Path "c:\windows\fonts\$($File.name)")

保罗是对的。基本上你的情况是倒退的

如果(测试路径“c:\windows\fonts\$($File.name)”) 相当于 If((测试路径“c:\windows\fonts\$($File.name)”)-eq$True)


两种方法都可以,尽管第二种方法不必要地更加复杂。

保罗是正确的。基本上你的情况是倒退的

如果(测试路径“c:\windows\fonts\$($File.name)”) 相当于 If((测试路径“c:\windows\fonts\$($File.name)”)-eq$True)


两种方法都可以,但第二种方法不必要地更复杂。

您的问题到底是什么?错误在(else)中,出现一条消息,要求替换现有字体。这不应该发生,因为(else)应该安装不存在的字体!您的问题到底是什么?错误在(else)中,出现一条消息,要求替换现有字体。这不应该发生,因为(else)应该安装不存在的字体!