-1

次のように、エイリアスにバインドされた PowerShell スクリプトに多数の os 関数があります。

function Run
{
    # somethin that takes a while
}

set-alias r Run

各通話の時間を測定したいと思います。Stopwatchそれを行うには、次のように .NET を作成し、開始し、指定されたアクションを実行し、時間を停止Stopwatchして時間を出力する別の関数を使用したいと思います。

function Crono($action)
{
$sw = [Diagnostics.Stopwatch]::StartNew()

    & $action

$sw.Stop()
Write-Host "> Operation done in: " + $sw.Elapsed;
}

set-alias r Crono(Run)

ただし、このエイリアスは次のエラーをスローします。

Set-Alias : 引数 'System.Object[]' を受け入れる位置パラメーターが見つかりません。At ...\script.ps1:85 char:10 + set-alias <<<< r Crono(Run) + CategoryInfo : InvalidArgument: (:) [Set-Alias], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell. Commands.SetAliasCommand

それは可能ですか?他に方法はありますか?

ありがとう。

編集:

返信ありがとうございます。受け取ったフィードバックを基に、次のように作成しました。

function CronoRun()
{
    Crono(Run);
}
set-alias r **CronoRun**

しかし今、Run関数が.batファイルを呼び出している場合、スクリプトで何が起こっているかを「解釈」しようとするため、おそらくRunメソッドがファイル内で実行される方法に関連して、いくつかの例外がスローされCronoます。何か案が?

4

3 に答える 3

3

「Measure-Command」コマンドレットを使用して、式、スクリプト ブロック、およびコマンドレットにかかった時間を測定できます。

履歴項目の *ExecutionTime プロパティを確認することもできます。

PS> Get-History -Count 1 | fl *

Id                 : 31
CommandLine        : Get-History -Count 1
ExecutionStatus    : Completed
StartExecutionTime : 3/13/2013 2:50:11 PM
EndExecutionTime   : 3/13/2013 2:50:11 PM
于 2013-03-13T12:51:20.660 に答える
2

からget-help set-alias

*これらのコマンドは、パラメーターを使用してコマンドにエイリアスを割り当てる方法、または多くのコマンドのパイプラインにエイリアスを割り当てる方法を示しています。コマンドレットのエイリアスを作成することはできますが、コマンドレットとそのパラメーターで構成されるコマンドのエイリアスを作成することはできません。ただし、コマンドを関数またはスクリプトに配置すると、便利な関数またはスクリプト名を作成したり、関数またはスクリプトの1つ以上のエイリアスを作成したりできます。この例では、ユーザーはコマンド「set-locationc:\ windows \ system32」のエイリアスを作成したいと考えています。ここで、「set-location」はコマンドレットであり、「C:\ Windows\System32」はパスの値です。パラメータ。これを行うために、最初のコマンドは、Set-Locationコマンドを含む「CD32」と呼ばれる関数を作成します。2番目のコマンドは、CD32関数のエイリアス「go」を作成します。それで、

 PS C:\> function CD32 {set-location c:\windows\system32}
 PS C:\>set-alias go cd32*
于 2013-03-13T12:31:41.767 に答える
1

パラメータなしでコマンドをエイリアスすることしかできません。したがって、その関数を呼び出しChrono(Run)てエイリアスするダミー関数を作成する必要があります。

于 2013-03-13T12:35:15.133 に答える