2016-05-21 6 views
0

私はZIPファイルを抽出する必要があるスクリプトを作成しています。問題は、すべての展開マシンがWindows 2008 R2でPowerShell 2.0がインストールされていることです。私はおそらく動作する別のWebサイトで次のコードを見つけましたが、PowerShellスクリプトを作成するのではなく、コマンドラインからすべてを実行する必要があります。PowerShell 2.0を使用してZIPを抽出

たとえば、powershell.exe -command (New-Object System.Net.ShellApplication)を使用して次のコードを書くことができますか?私はRedditの上でそれを見つけた

$shell = New-Object -ComObject Shell.Application 
$zip = $shell.NameSpace("C:\howtogeeksite.zip") 
foreach($item in $zip.Items()) { 
    $shell.Namespace("C:\temp\howtogeek").CopyHere($item) 
} 

答えて

0

あなたは;とラインを結ぶことにより、-Commandに直接書くことができ、例:

powershell -NoProfile -Command $shell = new-object -com shell.application; $zip = $shell.NameSpace(“C:\howtogeeksite.zip”); foreach($item in $zip.items()) { $shell.Namespace(“C:\temp\howtogeek”).copyhere($item) } 

、またはbase64でエンコードされた文字列を使用できます。

powershell -? 

.. 
# To use the -EncodedCommand parameter: 
    $command = 'dir "c:\program files" ' 
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
    $encodedCommand = [Convert]::ToBase64String($bytes) 
    powershell.exe -encodedCommand $encodedCommand 

例生成コマンド:

$command = @' 
$shell = New-Object -ComObject Shell.Application 
$zip = $shell.NameSpace("C:\howtogeeksite.zip") 
foreach($item in $zip.Items()) { 
    $shell.Namespace("C:\temp\howtogeek").CopyHere($item) 
} 
'@ 

[convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($command)) 

#output 
JABzAGgAZQBsAGwAIAA9ACAAbgBlAHcALQBvAGIAagBlAGMAdAAgAC0AYwBvAG0AIABzAGgAZQBsAGwALgBhAHAAcABsAGkAYwBhAHQAaQBvAG4ADQAKACQAegBpAHAAIAA9ACAAJABzAGgAZQBsAGwALgBOAGEAbQBlAFMAcABhAGMAZQAoABwgQwA6AFwAaABvAHcAdABvAGcAZQBlAGsAcwBpAHQAZQAuAHoAaQBwAB0gKQANAAoAZgBvAHIAZQBhAGMAaAAoACQAaQB0AGUAbQAgAGkAbgAgACQAegBpAHAALgBpAHQAZQBtAHMAKAApACkADQAKAHsADQAKACQAcwBoAGUAbABsAC4ATgBhAG0AZQBzAHAAYQBjAGUAKAAcIEMAOgBcAHQAZQBtAHAAXABoAG8AdwB0AG8AZwBlAGUAawAdICkALgBjAG8AcAB5AGgAZQByAGUAKAAkAGkAdABlAG0AKQANAAoAfQA= 

符号化されたコマンドを使用して:

powershell -NoProfile -encodedCommand JABzAGgAZQBsAGwAIAA9ACAAbgBlAHcALQBvAGIAagBlAGMAdAAgAC0AYwBvAG0AIABzAGgAZQBsAGwALgBhAHAAcABsAGkAYwBhAHQAaQBvAG4ADQAKACQAegBpAHAAIAA9ACAAJABzAGgAZQBsAGwALgBOAGEAbQBlAFMAcABhAGMAZQAoABwgQwA6AFwAaABvAHcAdABvAGcAZQBlAGsAcwBpAHQAZQAuAHoAaQBwAB0gKQANAAoAZgBvAHIAZQBhAGMAaAAoACQAaQB0AGUAbQAgAGkAbgAgACQAegBpAHAALgBpAHQAZQBtAHMAKAApACkADQAKAHsADQAKACQAcwBoAGUAbABsAC4ATgBhAG0AZQBzAHAAYQBjAGUAKAAcIEMAOgBcAHQAZQBtAHAAXABoAG8AdwB0AG8AZwBlAGUAawAdICkALgBjAG8AcAB5AGgAZQByAGUAKAAkAGkAdABlAG0AKQANAAoAfQA= 
2

ので...私は答えを共有するだろうと思った

powershell.exe (new-object -com shell.application).NameSpace("E:\foldername").CopyHere((new-object -com shell.application).NameSpace("E:\test.zip").Items()) 
関連する問題