バッチスクリプトでは、環境変数を変更すると、デフォルトで現在のセッションにグローバルな影響があります。 PowerShellでは、スコープがスクリプトの変更を分離するために使用されるため、正反対のことが言えます。ここでは、スコープがPowerShellスクリプトにどのように影響するか、およびその中やその周辺で作業する方法を探ります。. スコープとは? PowerShellでは、「スコープ」とはスクリプトまたはコマンドシェルが動作している現在の環境を指します。スコープは、スクリプトや関数によって意図せずに変更されることから環境内の特定のオブジェクトを保護するために使用されます。特に、以下の事項は、別のスコープから実行されたコマンドによる変更から保護されています。 変数 エイリアス 関数 PowerShellドライブ(PSDrive) スクリプトまたは関数を実行したとき、またはPowerShellの新しいセッションまたはインスタンスを作成したときに、新しいスコープが作成されます。スクリプトと関数を実行することによって作成されたスコープは、それらが作成されたスコープと「親/子」関係を持ちます。特に特別な意味を持ち、名前でアクセスできるスコープがいくつかあります。 の グローバル scopeは、PowerShellの起動時に作成されるスコープです。これには、PowerShellに組み込まれている変数、エイリアス、関数、およびPSDriveだけでなく、PowerShellプロファイルによって作成されたものも含まれます。. の 地元 scopeは、現在のスコープが何であれを指します。 PowerShellを起動すると、グローバルスコープを参照し、スクリプト内ではスクリプトスコープなどになります。. の スクリプト スコープはスクリプトが実行されたときに作成されます。この範囲内で動作する唯一のコマンドは、スクリプト内にあるものです。. 非公開 スコープを現在のスコープ内で定義して、他のスコープ内のコマンドが他の方法でアクセスできるアイテムを読み取ったり変更したりできないようにすることができます。. スコープは、特定のコマンドでは番号で参照することもできます。この場合、現在のスコープはゼロとして参照され、その先祖は増加する整数によって参照されます。たとえば、Globalスコープから実行されたスクリプト内では、Scriptスコープは0になり、Globalスコープは1になります。関数など、Scriptスコープ内でさらにネストされたスコープは、Globalスコープを2として参照します。負の数は子スコープを参照するようには働きません - その理由は間もなく明らかになります. スコープがコマンドに与える影響 前述のように、あるスコープ内で実行されたコマンドは、特に指示がない限り、別のスコープ内のものには影響しません。たとえば、$ MyVarがGlobalスコープに存在し、スクリプトが$ MyVarを別の値に設定するコマンドを実行した場合、$ MyVarのグローバルバージョンは変更されずにそのまま残り、$ MyVarのコピーは新しいスコープでScriptスコープに配置されます。値。...