2017-09-19 14 views
1

.ps1スクリプトを実行する最も良い方法は何ですか? 私はpowershellについて知らないユーザーですが、スクリプトをダブルクリックして実行するだけです。
ベストプラクティスについてアドバイスできますか? powershellスクリプト ".ps1"を実行する最良の方法

は、私はそれが確実にスクリプトをダブルクリックする唯一の方法であると信じて、あなたは

[CmdletBinding()] 
Param(
    [Parameter(Mandatory = $False,   
     ValueFromPipeline = $True, 
     ValueFromPipelineByPropertyName = $True,   
     HelpMessage = "Provide Files Path.")] 
    [string]$FilesPath = 'C:\Users\myusername\OneDrive - mycompany\mycompany\Sales & Marketing\Sales Reports', 
    [Parameter(Mandatory = $False, 
     ValueFromPipeline = $True, 
     ValueFromPipelineByPropertyName = $True, 
     HelpMessage = "Provide Sheet Name.")] 
    [string]$SheetName = 'Expenses' 
) 

Try 
{ 
    $Files = Get-ChildItem -Path $FilesPath -Include *.xlsx, *.xls, *.xlsm -Recurse 
    $Counter = $Files.Count 
    $Array = @() 
    $OutPutFilePath = (Join-Path $FilesPath -ChildPath "Exported-ExcelData.csv") 
    Remove-Item -Path $OutPutFilePath -Force -ErrorAction SilentlyContinue 
    ForEach ($File In $Files) 
    {     
     Write-Verbose -Message "Accessing File $($File.Name) and Exporting Data from Sheet $SheetName. Remaining $Counter Files." -Verbose 
     $Counter -= 1 
     $AllData = Import-Excel -Path $File.FullName -WorksheetName $SheetName -NoHeader 
     $i = 0 
     ForEach ($Data In $AllData) 
     { 
      $ArrayData = "" | Select-Object "P1", "P2", "P3", "P4", "P5", "P6" 
      $ArrayData.P1 = $Data[0].P1 
      $ArrayData.P2 = $Data[0].P2 
      $ArrayData.P3 = $Data[0].P3 
      $ArrayData.P4 = $File.Name 
      $ArrayData.P5 = $File.FullName 
      $ArrayData.P6 = ($i += 1) 
      $Array += $ArrayData 
     } 
    } 
    $Array | Export-Csv -Path $OutPutFilePath -Append -NoTypeInformation 
} 
Catch 
{ 
    $ErrorLog = "Error On " + (Get-Date) + ";$($_.Exception.Message) - Line Number: $($_.InvocationInfo.ScriptLineNumber)" 
    Write-Error "$($_.Exception.Message) - Line Number: $($_.InvocationInfo.ScriptLineNumber)"  
} 
Finally 
{ 
    Write-Host "Process has been completed!" -ForegroundColor Green 
    Read-Host "Press any key to continue..." 
}  
+0

[PowerShellスクリプトの実行は、1-2-3ほど簡単です。](http://windowsitpro.com/powershell/running- powershell-scripts-easy-1-2-3) –

答えて

2

バッチファイルを作成します。 PowershellポリシーのためにPS1ファイルを起動すると問題が発生する可能性があります。また、PS1スクリプトはWindowsマシンではデフォルトで起動しません。

ただし、PS1スクリプトを参照するバッチファイルを作成すると、すべて設定されます。

-ExecutionPolicy Bypassは現在のシステムポリシーを無視して、問題なくスクリプトを実行できます。

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\Users\SO\Desktop\YourScript.ps1'" 

以下の2つのバッチコマンドは、相対パスを使用して表示されます。

# Launch script 
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%mypath:~0,-1%\data\install.ps1'" 

# Same thing but force the script to run as admin 
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -NoExit -File ""%mypath:~0,-1%\data\install.ps1""' -Verb RunAs}" 

これらの2つのバージョンでは、PS1はデータと呼ばれるサブフォルダにあり、スクリプトはinstall.ps1と呼ばれます。 したがって、私はバッチファイル内のスクリプトパスをハードコードする必要はありません(PS1をバッチファイルと同じレベルに置くことができます。私の例では、実際には最初のフォルダレベルのバッチのみが必要でした)ユーザーが実行するファイルを考える必要がないように、サブフォルダ内の「表示から非表示」に設定することができます。

1

私は、スクリプトをコンパイル推薦ありがとうございました。他の方法もありますが、それらはセキュリティを弱める必要があり、その結果、さまざまなシステム間で実行するのが難しくなります。

PowerShellをコンパイルする最も簡単な方法は、PowerGUIを使用することです。スクリプトを貼り付けることができ、ダブルクリック可能な移植可能な.exeファイルをコンパイルすることができます。権限を昇格する必要はありません。彼らのウェブサイトはもはやそれをホストしないので、サードパーティのダウンロードを見つける必要があります。

また、Visual Studio拡張機能やSapienの製品のいずれかを見つけることもできますが、どちらもお金がかかり、基本的なダブルクリック可能なスクリプトを作成するだけではそれほど優れていません。

さらに、スクリプトを修正して、コードを書いたと仮定すると、簡単に実行できるようにする必要があります。基本的には、ISEでRUNをクリックした場合は、直接入力する必要がないように入力する必要がないようにする必要があります。

+0

このスクリプトを別のスクリプトから呼び出すとどうすれば実現できますか? – Codernator

+0

@Codernatorなぜでしょうか? – TheIncorrigible1

関連する問題