永続的なPowerShellエイリアスを作成する方法


141

私が作りたいaliascmdlet私はPowerShellの現在のセッションを閉じた後に期限切れにならないことを、のは、私はこのエイリアスを持っているとしましょう:

C:\Users\Aymen> New-Alias Goto Set-Location

これは完全にGotoエイリアスを作成しますが、現在のセッションを閉じた後でも使用したいのですが、どうすればそれを実現できますか。

注意:

PowerShellヘルプシステムは、作成したエイリアスをエクスポートし、次に新しいセッションを開いたときにインポートできることを示唆しています。実際、これは私が探しているものではありません。別のセッションで作成する


IMOは、スクリプトをPATHに入れる方がはるかに優れています。こうすることで、開いているすべてのシェルでコマンドをすぐに使用できるようになり、変更すると、$ profileなどを再読み込みする必要なく、その後のすべての使用に変更が反映されます。
masterxilo 2018年

回答:


112

更新-2017年1月

profile.ps1powershellが起動するたびに実行される任意のpowershellコードをファイルに保存することが可能です。どのユーザーがコードを実行する必要があるかに応じて、コードを格納するパスは少なくとも6つあります。「すべてのユーザー」と「自分のユーザーのみ」のパスの2つだけを考慮することができます。

したがって、あなたの質問に答えるには、profile.ps1実行したいコードを含むファイルを作成するだけです。

New-Alias Goto Set-Location

適切なパスに保存します。

  • "$Home\Documents" (C:\ Users \ yourname \ Documents):ユーザーだけがコードを実行します。
  • $PsHome (C:\ Windows \ System32 \ WindowsPowerShell \ v1.0):すべてのユーザーがコードを実行します。

変更を適用するには、開いているすべてのpowershellインスタンスを閉じて再起動します。

チップ

  • 両方のパスにprofile.ps1ファイルが含まれている場合、すべてのユーザーのファイルが最初に実行され、次にユーザー固有になります。

  • コードの実行を各ユーザーに拡張する必要がない場合は、常にユーザー固有のプロファイルにコードを配置してください。ユーザースペースにファイルを追加するのに管理者権限は必要ありません(そうでない場合は追加します)。また、他のユーザーのスペースを汚染することもありません。

  • 覚えて!$PsHomeあなたは常にプロファイルコードを実行したい場合は、両方の環境を考慮しなければならないので、パスは、PowerShellのの32ビットと64ビットのインスタンスの間で異なっています。通常、パスはC:\Windows\System32\WindowsPowerShell\v1.064ビット環境C:\Windows\SysWow64\WindowsPowerShell\v1.0用と32 ビット環境用です。


9
エラーはありませんでしたが、機能しませんでした。これが権限の問題かどうかはわかりません。私は実際にそれを動作させました(私は以前にコメントした方がいい)私はフォルダーを作成してから、他のパスを\Users\{ME}\Documents\WindowsPowerShell追加せMicrosoft.PowerShell_profile.ps1ずに機能しました。

2
リンクされた記事による"$HOME\Documents\WindowsPowerShell"と、名前のMicrosoft.PowerShell_profile.ps1使用は、範囲を非ISEおよび現在のホストに制限しますが、権限の問題ではないはずです(と同じ"$Home\Documents\profile.ps1" should apply)。たぶん実際はそうではないので、試してみます。情報をありがとう
ナイジェル

2
こんにちは@Naigel、私はそれを機能させるためにこのアプローチを使用する必要があります:superuser.com/questions/516700/…したがって、私の最終的な解決策はプロファイルのファイルを作成することでした:New-Item -path $profile -type file -forceフォルダーとファイルを作成しましたDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle

57
プロファイルの場所を取得する最良の方法は、PowerShellウィンドウで「echo $ profile」を実行することです。
Rahul Jha 2017

2
Windows Creators Updateがデフォルトの場所にあるファイルをクリアしているように見えるので、profile.ps1ファイルのバックアップを作成してください。
gooleem

109

この種のものを直接$env:WINDIRpowershellフォルダーに追加することはお勧めできません。
推奨される方法は、それを個人プロファイルに追加することです。

cd $env:USERPROFILE\Documents
md WindowsPowerShell -ErrorAction SilentlyContinue
cd WindowsPowerShell
New-Item Microsoft.PowerShell_profile.ps1 -ItemType "file" -ErrorAction SilentlyContinue
powershell_ise.exe .\Microsoft.PowerShell_profile.ps1

次に、現在開いているMicrosoft.PowerShell_profile.ps1ファイルにエイリアスを追加します。

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

次にそれを保存し、現在のセッションを次のように更新します。

. $profile

注: 念のため、次のような許可の問題が発生した場合

CategoryInfo:SecurityError:(:) []、PSSecurityException + FullyQualifiedErrorId:UnauthorizedAccess

以下のコマンドを試して、セッションを再度更新してください。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

1
素晴らしいコメント。非常に明確ですが、私のpowershellは触れていません。
JustinB 2017

9
プロファイルスクリプトの実行を許可するために、1つの追加手順を実行する必要がありました。管理者としてPowershellを実行し、を実行しSet-ExecutionPolicy RemoteSigned -Scope CurrentUserます。この-Scopeオプションにより、セキュリティが少し強化されます。
zombat

2
これは素晴らしい方法です!関数自体もシェルで使用可能になるため、Set-Alias部分は実際には必要ありません。関数を呼び出すだけMyAliasです。また、引数を渡すには@Args、たとえば、function gs { git status @Args }
Automatico

3
@Automatico私Set-Aliasは、適切な動詞で適切なPS規則を使用してメソッドに名前を付けたいので、明示するのが好きです。しかし、はい、好き嫌いがない場合は、呼び出すメソッドに名前を付けることができます。
チェイスフローレル

1
@zombatこれはまさに何時間も苦労していたことです。ありがとう、これで終わりです。
jawad mansoor

28

2018、Windows 10

簡単なPowerShellスクリプトを使用して、任意のファイルまたはディレクトリにリンクできます。

ファイルショートカットスクリプトの作成

Windows PowerShell ISEを開きます。スクリプトペインで次のように記述します。

New-Alias ${shortcutName} ${fullFileLocation}

次に、コマンドラインペインに移動します。でPowerShellユーザープロファイルのアドレスを検索しますecho $profile。このアドレスにスクリプトを保存します。

ここに画像の説明を入力してください

PowerShellのプロファイルアドレスのスクリプトは、powershellを開くたびに実行されます。ショートカットは、すべての新しいPowerShellウィンドウで機能します。

ディレクトリショートカットスクリプトの作成

スクリプトには別の行が必要です。

function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction} 

残りはまったく同じです。

ここに画像の説明を入力してください

PowerShellスクリプトを有効にする

デフォルトでは、PowerShellスクリプトはブロックされます。それらを有効にするには、設定->更新とセキュリティ->開発者向けを開きます。開発者モードを選択します(再起動が必要な場合があります)。 開発者モードの選択Windows 10

[PowerShell]セクションまでスクロールし、[実行ポリシーを変更...]オプションを選択して適用します。

PowerShellスクリプトを有効にする


2
echo $profileファイルを追加するための正しい場所を見つけるのに役立つ素晴らしいヒントです。包括的な回答をありがとう
ペドロマルティンスティモテオダコスタ

19

シンプル。例えば...

Windows PowerShellウィンドウを開き、次のように入力します。

notepad $profile

次に、次のような関数を作成します。

function goSomewhereThenOpenGoogleThenDeleteSomething {
    cd C:\Users\
    Start-Process -FilePath "http://www.google.com"
    rm fileName.txt
}

次に、関数名の下に次のように入力します。

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

これで、「google」という単語をWindows PowerShellに入力して、関数内でコードを実行させることができます。


$ profileはWindows 10のデフォルトの環境変数ではないようです。何を指しているのですか?
wordsthewise

@wordsforthewise-$ PROFILE自動変数は、現在のセッションで使用可能なPowerShellプロファイルへのパスを格納します。Windows PowerShellに含まれています。
スターリングボーン

1
これは、提供された最も単純なソリューションではありませんでした。
フィル

これを機能させるには、(別の答えで)「PowerShellスクリプトを有効にする」を有効にする必要がありました。マジで超簡単!
ロッキーケフ

10

この可能な場所のリストに追加するだけです...

これは私にとってはうまくいきませんでした: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

しかし、これはしました: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

プロファイルがない場合、またはプロファイルを設定する場合は、次のコマンドを実行します。これにより、必要なフォルダー/ファイルが作成され、その場所が表示されます。 New-Item -path $profile -type file -force


5

profile1.pslファイルを作成するには、次のコマンドを入力します。

new-item $ PROFILE.CurrentUserAllHosts -ItemType file -Force

ファイルにアクセスするには、次のコマンドを入力します。

ise $ PROFILE.CurrentUserAllHosts

ノートあなたが前にこれを行っていない場合、あなたはので、あなたが制限(デフォルト)から無制限に変更する必要があり、あなたの実行ポリシーのスクリプトを実行することができませんことがわかります。

これを行うには、スクリプトを閉じてから、次のコマンドを入力します。

Set-ExecutionPolicy -Scope CurrentUser

次に:

RemoteSigned

次に、このコマンドをもう一度:

ise $ PROFILE.CurrentUserAllHosts

最後に、スクリプトにエイリアスを入力して保存すると、コンピューターを再起動した後でも、Powershellを実行するたびにエイリアスが実行されます。


3
あなたはおそらくしたいです:Set-ExecutionPolicy RemoteSigned。お勧めしませんUnrestricted。出典:itprotoday.com/management-mobility/...
PhilT

2

これは少し空想です...しかしそれはうまくいきます:

ステップ1: Powershellプロファイルを作成します。

FILE: install_profile.ps1
# THIS SCRIPT BLOWS AWAY YOUR DEFAULT POWERSHELL PROFILE SCRIPT
#   AND INSTALLS A POINTER TO A GLOBAL POWERSHELL PROFILE

$ErrorActionPreference = "Stop"

function print ([string]$msg)
{
    Write-Host -ForegroundColor Green $msg
}

print ""

# User's Powershell Profile
$psdir  = "$env:USERPROFILE\Documents\WindowsPowerShell"
$psfile = $psdir + "\Microsoft.PowerShell_profile.ps1"

print "Creating Directory: $psdir"
md $psdir -ErrorAction SilentlyContinue | out-null

# this is your auto-generated powershell profile to be installed
$content = @(
    "",
    ". ~/Documents/tools/profile.ps1",
    ""
)

print "Creating File: $psfile"
[System.IO.File]::WriteAllLines($psfile, $content)

print ""

# Make sure Powershell profile is readable
Set-ExecutionPolicy -Scope CurrentUser Unrestricted

ステップ2:次に、ツール〜/ Documents / tools / profile.ps1で:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

ステップ3:

$ Set-ExecutionPolicy -Scope CurrentUser Unrestricted $。./install_profile.ps1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.