我正在试图弄清楚如何编写一个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可以循环通过将非常感激!
答案 0 :(得分:2)
ASSOC
和FTYPE
是CMD.exe内置命令,而不是可执行文件,这意味着它们只能在CMD的上下文中运行。运行它们的最简单方法是invoke CMD from PowerShell。
cmd /c assoc .swf
cmd /c ftype ShockwaveFlash.ShockwaveFlash
如果您需要“纯”PowerShell实现,那么您需要转到注册表。 ASSOC
和FTYPE
仅写入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的代码,但通常这不是自动脚本的问题,因为它们会强制用户重新登录。