2017-06-22 6 views
0

PowerShell Impの場合は、現在VBScript-to-Windows PowerShell Conversion Guideがリストの一番上に表示されます。しかし、答えは技術的なサポートの多くである:VBScriptのImp演算子を変換する

インプオペレータ

定義:二つの表現の論理含意を実行します。

Imp演算子について何を知っていますか? 2つのこと:1)Visual Basic .NETではサポートされていません。2)実際に使用している人は誰も聞いたことがありません。したがって、Windows PowerShellに相当するかどうかは問題ではありません。

実際には、VBScriptでImp演算子(別名:A→B)を何度も使用していましたが、それが存在する場合はPowerShellで使用されていた可能性があります。

例1

私は(それもコピーする必要がある)アーカイブするように設定されている場合を除いて隠されていない任意のファイルをコピーしたいです。私はLog-Debug別名を持つLog-Entryコマンドレットを持って

If (($File.Attributes -match "Hidden") -imp ($File.Attributes -match "Archive")) {Copy $File} 

例2

:このため
コマンドのようなものだったでしょう。ネイティブのWrite-Host/Write-Debugの機能に似ています。 Log-Debugエイリアスが使用されている場合、情報は公開されず、共通の-Debugが提供された場合にのみ記録されます。

If (($Noun -eq "Debug") -imp $MyInvocation.BoundParameters.Debug.IsPresent) {Add-content $LogFile $$Entry} 

どのように私は、コードの最小の論理含意演算子を構築することができます。このため コマンドのようなものだったでしょうか?あなたは文字通り、静かな定義を取る場合

答えて

0

、あなたはおそらく論理的含意のためのような文に来る:あなたは二度同じ機能を実行する必要があるとして、静かな過度のかもしれません

If ($Expression1) {If ($Expression2) {DoThis}} Else {DoThis} 

を。 だから、私が思い付く作られたVBScriptのImpオペレータの代替としてであれば、単一の条件を有することが好ましい:

If (($True, [Bool]$Expression2)[[Bool]$Expression1]) {...} 

しかし、少しさらなる調査もVBScriptのインプのためのはるかに単純な置き換えに私を導きましたオペレータ:


If (!$Expression1 -or $Expression2) {...} 

チェック

0..3 | ForEach { 
    $Expression1, $Expression2 = [Int]($_/2), [Int]($_ % 2) 
    New-Object PSObject -Property @{ 
     Expression1 = [Bool]$Expression1 
     Expression2 = [Bool]$Expression2 
     Implication = !$Expression1 -or $Expression2 
    } 
} | Format-Table -AutoSize 

真理値表

Expression1 Expression2 Implication 
----------- ----------- ----------- 
     False  False  True 
     False  True  True 
     True  False  False 
     True  True  True 

注:$Null式が$Falseと考えられている。このソリューションでは。これはVBScript Impの実装と異なりますが、$Null式を含む他のPowerShell演算子と一貫しています。例えばVBScriptステートメント:If 1 And vbNull Then msgbox "True" Else msgbox "False"は、Trueを返します。ここで、PowerShellステートメントIf (1 -And $Null) {"True"} Else {"False"}は、Falseを返します。

ビット単位

あなたは(おそらくと呼ばれるべき - bImp、それが存在する場合)ビット単位Impオペレータを探している場合、それは次のようになります。

$Implication = -bNot Expression1 -bOr Expression2 # e.g.: -bNot 3 -bOr 5 = -3 (-bAnd 0xF = 13)