gpt4 book ai didi

powershell - 如何在PowerShell中将选项标志传递给Folder.CopyHere?

转载 作者:行者123 更新时间:2023-12-04 06:42:31 30 4
gpt4 key购买 nike

我正在尝试编写一个脚本,该脚本可以自动无声地将一堆字体移到Fonts special folder中,以便可以使用它们,就好像您已从资源管理器中“安装”了它们一样(通过拖放,复制或右键单击并选择“安装”)。我一直把Shell.Application部分放到副本中。

$FONTS = 0x14
$shell = New-Object -ComObject Shell.Application
$source = $shell.Namespace($downloaded_path)
$target = $shell.Namespace($FONTS)
$target.CopyHere($source.Items())

但是,某些系统可能已经安装了字体,并且我希望进度对话框被隐藏并且任何提示都被静默接受。


因此,我正在研究 Folder.CopyHere 选项标志。
  • 4不显示进度对话框
  • 16对显示的任何对话框做出“对所有人都同意”的响应。

  • 我希望它们在此文件夹中受支持(某些选项在设计上会被忽略)。而且我认为这些都是十进制的,对吗?是否需要转换?但是,尽管我将它们传递了,但仍然看到两个对话框。我试过了
    $options = 4           <-- don't expect int to work
    $options = 0x4 <-- thought hexidecimal would be ok, the VB documentation shows &H4&
    $options = "4" <-- string's the thing?
    $options = [byte]4 <-- no luck with bytes
    $options = [variant]4 <-- this isn't even a type accelerator!

    而且,如果我可以使一个选项起作用,那么如何使两个选项都起作用呢?是否将它们一起 bor在一起?格式呢?
    $options = 4 -bor 16

    还是我添加它们或将它们转换为十六进制?
    $options = "{0:X}" -f (4 + 16)

    最佳答案

    您可以使用4 -bor 16。由于类型为VARIANT,很难说出此方法的期望值。我本以为会采用整数值。如果这不起作用,则MSDN topic on Folder.CopyHere的注释表示字符串应该起作用:

    function CopyFileProgress
    {
    param( $Source, $DstFolder, $CopyType = 0 )

    # Convert the decimal to hex
    $copyFlag = [String]::Format("{0:x}", $CopyType)

    $objShell = New-Object -ComObject "Shell.Application"
    $objFolder = $objShell.NameSpace($DestLocation)
    $objFolder.CopyHere($Source, $copyFlag)
    }

    虽然我想知道格式字符串是否应为 "0x{0:x}"

    请注意,对于普通的.NET标志样式枚举,您可以将多个标志传递给强类型化为枚举的.NET(或命令参数),如下所示:
    $srv.ReplicationServer.Script('Creation,SomeOtherValue')

    Oisin已在 blog post中编写了有关此主题的一些信息。

    关于powershell - 如何在PowerShell中将选项标志传递给Folder.CopyHere?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165856/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com