2016-10-04 1 views
0

すべての.swf拡張子をInternet Explorerで開くように設定するpowershellスクリプトを書く方法を理解しようとしています。私は以下の例のようなコマンドプロンプトでこれを実行しようとしていました。 Unfornately私の上司はこれをpowershellで行う必要があります。私はtxtファイルを持っているので、これについてのどんな助けも大いに評価されます。これは約400台のコンピュータをループし、これらの変更を行う必要があります。Powershellスクリプトでインターネットエクスプローラでswf拡張子を開く

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を変更する方法を挿入しようとして任意のヘルプを:私がしようとしています何

CMDウェイ

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

大変感謝しています!

+0

http://stackoverflow.com/questions/33571900/assoc-and-ftype-do-not-work-under-powershellは正しい方向を指しているはずです。 FTYPEは、cmd.exeが使用できるコマンドではありません。変数にコマンドを設定し、変数を呼び出すことができます。 – Bob007

+1

これは実際にはスクリプトの代わりにGPOを使って行うべきもののようです。 – Eris

+0

@Eris私は残念ながら、私がpowershellを通してこれを押し出すことができたと思っています。私はそれを修正する方法のスクリプトを編集しようとしましたか? –

答えて

2

ASSOCおよびFTYPEは、CMDのコンテキストでのみ実行できることを意味する実行可能ファイルではなく、CMD.exe組み込みコマンドです。それらを実行する最も簡単な方法はinvoke CMD from PowerShellです。

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

"純粋な" PowerShell実装が必要な場合は、レジストリに移動する必要があります。 ASSOCFTYPEは、HKEY_CLASSES_ROOTハイブのレジストリに書き込むだけです。 PowerShellにはHKCR:の既定のPSDriveはありませんが、そのハイブには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' 

これには、管理者権限で実行する必要があります。これはまた、キーが既に存在することを前提としています。あなたがしたいすべてがiexplore.exeに開くように.swfファイルを設定されている場合は変更しているようではない場合、あなたはNew-Item

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

しかしでそれを作成する必要があります、その後、値を取得することは、不要ですFTYPEキー。拡張子の関連付けをShockwaveFlash.ShockwaveFlashの代わりにInternetExplorer.Applicationに変更するだけで済みます。レジストリを変更することで、 "純粋な" PowerShellで

cmd /c assoc .swf=InternetExplorer.Application 

:PowerShellで

assoc .swf=InternetExplorer.Application 

:バッチファイルで

:以下のフルスクリプトがこれを行います

$key = "HKLM:\Software\Classes\.swf" 
$defaultName = '(default)' 
$newValue = 'InternetExplorer.Application' 

if (-not (Test-Path $key)) { 
    New-Item -Path $key 
} 
Set-Itemproperty -Path $key -Name $defaultName -Value $newValue 

レジストリの変更はすぐには有効にならないことに注意してください。また、WM_SETTINGCHANGEイベントを送信するか、単にexplorer.exeを再起動する必要があります(例:ログオフ)。イベントhereを送信するコードを見つけることができますが、自動スクリプトの場合は通常、ユーザーが強制的に再ログインするため、問題はありません。

+0

canあなたはちょうど私が編集したスクリプトをチェックすることはあなたの話ですか? –

+0

私はあなたが持っているcmd/c assocを使いたいですか?しかし、どのように私はすべてのPCを介してそれがすべてのリモートを行うにループする必要がありますか? –

+0

私は 'cmd/c assoc .swf = InternetExplorer.Application'を理解しています。私のtxtファイルのコンピュータ名のリストでそれを行う方法を理解しようとしています –

関連する問題