Powershell脚本使用Internet Explorer打开swf扩展

时间:2016-10-04 15:11:42

标签: powershell

我正在试图弄清楚如何编写一个powershell脚本,它将设置所有.swf扩展以在Internet Explorer上打开。我试图使用类似于下面示例的命令提示符执行此操作。不幸的是,我的老板要求通过powershell完成这项工作。任何有关这方面的帮助将非常感激,因为我有一个txt文件将循环通过大约400台计算机,并需要进行这些更改。

CMD方式

C:\>ASSOC .swf
.swf=ShockwaveFlash.ShockwaveFlash
C:\>FTYPE ShockwaveFlash.ShockwaveFlash
ShockwaveFlash.ShockwaveFlash="C:\bin\FlashPlayer.exe" %1

我在尝试什么:

    Function Get-FileName{
    [CmdletBinding()]
    Param(
        [String]$Filter = "|*.*",
        [String]$InitialDirectory = "C:\")

        [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
        $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
        $OpenFileDialog.initialDirectory = $InitialDirectory
        $OpenFileDialog.filter = $Filter
        [void]$OpenFileDialog.ShowDialog()
        $OpenFileDialog.filename
    }

    $file = Get-FileName -InitialDirectory $env:USERPROFILE\Desktop -Filter "Text files (*.txt)|*.txt|All files (*.*)|*.*"
    ForEach ($item in (Get-Content $file)) {
        $sitem = $item.Split("|")
        $computer = $sitem[0].Trim()
        $user = $sitem[1].Trim()

    cmd /c assoc .swf=InternetExplorer.Application

        ### Will the above line automatically install on every pc? ###

    }

任何帮助尝试插入如何更改powershell中的FTYPE以便$ computer可以循环通过将非常感激!

1 个答案:

答案 0 :(得分:2)

ASSOCFTYPE是CMD.exe内置命令,而不是可执行文件,这意味着它们只能在CMD的上下文中运行。运行它们的最简单方法是invoke CMD from PowerShell

cmd /c assoc .swf
cmd /c ftype ShockwaveFlash.ShockwaveFlash

如果您需要“纯”PowerShell实现,那么您需要转到注册表。 ASSOCFTYPE仅写入HKEY_CLASSES_ROOT配置单元下的注册表。 PowerShell没有HKCR:的默认PSDrive,但该hive也可以在HKLM:\Software\Classes下访问。

$ext = '.swf'
$HKCR = 'HKLM:\Software\Classes'

$ftype = Get-ItemProperty -Path "$HKCR\$ext" | select -expand '(default)'

$commandLine = Get-ItemProperty -Path "$HKCR\$ftype\shell\open" | select -expand '(default)'

$commandLine

要更新这些值,只需在同一路径上使用Set-ItemProperty

Set-ItemProperty -Path "$HKCR\$ext" -Name '(default)' -Value 'ShockwaveFlash.ShockwaveFlash'

这要求您使用管理员权限运行。这也假设密钥已经存在。如果没有,则必须使用New-Item

创建它
if (-not (Test-Path "$HKCR\$ext")) {
    New-Item -Path "$HKCR\$ext"
}

但是,如果您只想将.swf文件设置为在iexplore.exe中打开,则无需检索这些值,因为修改{{1}钥匙。您只需将扩展名关联更改为FTYPE而不是InternetExplorer.Application。以下完整脚本将执行此操作:

在批处理文件中:

ShockwaveFlash.ShockwaveFlash

在PowerShell中:

assoc .swf=InternetExplorer.Application

在“纯”PowerShell中,通过修改注册表:

cmd /c assoc .swf=InternetExplorer.Application

请注意,修改注册表不会立即生效。您还需要发送WM_SETTINGCHANGE事件,或者只需重新启动explorer.exe(例如:通过注销)。您可以找到发送事件here的代码,但通常这不是自动脚本的问题,因为它们会强制用户重新登录。