스크립트에서 별칭 제거
다음과 같은 별칭을 제거할 수 있습니다.
Remove-Item Alias:wget
그런 다음 별칭을 사용해 보면 다음과 같은 예상 결과가 나타납니다.
PS > wget
wget : The term 'wget' is not recognized as the name of a cmdlet, function,
script file, or operable program.
그런데 대본에 같은 걸 넣으면.
PS > cat wget.ps1
Remove-Item Alias:wget
wget
예상치 못한 결과를 가져옵니다.
cmdlet Invoke-WebRequest at command pipeline position 1
Supply values for the following parameters:
Uri:
다음이 효과가 있는 것 같습니다.
If (Test-Path Alias:wget) {Remove-Item Alias:wget}
If (Test-Path Alias:wget) {Remove-Item Alias:wget}
wget
첫번째 줄은 다음을 제거합니다.Script
level alias, 그리고 두번째는 제거합니다.Global
레벨 별칭.두 가지 모두 테스트가 필요합니다.Global
존재하지 않습니다Script
생성되지 않았습니다.
또한 점 소스를 받지 않고 부모를 수정한다는 점에서 잘못된 동작을 합니다.
아니면 도트 소스로 원본을 전송할 수도 있고 그렇게 하면 됩니다.
. .\wget.ps1
이 일의 배후에 있는 이유는 범위...
로컬, 스크립트, 개인 및 전역의 네 가지 범위가 있습니다.
변수, 함수 및 별칭에 대한 규칙에 따르면 현재 범위에 정의되지 않은 경우 PowerShell에서 상위 범위를 검색합니다.
별칭의 기본값은 모든 범위로 설정되어 있으며, 모든 하위 범위에서 별칭을 볼 수 있으며, 새 하위 범위로 상속됩니다(공정한 정의가 될 것 같습니다).
Get-Alias -Name wget | select Name,options
Name Options
wget AllScope
스크립트 범위(scope 0)인 별칭을 제거하면 전역/부모 범위(scope 1)에서 별칭을 찾습니다.
닷 소스를 지정하면 스크립트를 처음부터 호출/글로벌 범위에서 실행하라는 의미이므로 기본적으로 글로벌 별칭을 제거하는 것입니다.
이거 먹어봐요...
예를 들어 1위.
1.1) 전역 범위에서 별칭을 제거합니다.
Remove-Item -Path Alias:\wget
1.2) 새로운 것(글로벌 스코프)을 만들어 비공개로 합니다.
New-Alias -Name wget -Value dir -Scope private
1.3) 이제 중첩 범위에서 별칭이 보이지 않습니다.따라서 스크립트를 실행해 보면 찾을 수 없습니다.
예를 들어 2번.
2.1) 전역 범위에서 별칭을 제거합니다.Remove-Item -Path 별칭:\wget
2.2) 새 것을 만들고 AllScope로 만듭니다.
New-Alias -Name wget -Value dir -Option AllScope
2.3) 이제 스크립트를 실행하면 정상적으로 작동합니다(부모 범위에서 새 별칭 dir 사용).
변수도 마찬가지로 시도할 수 있습니다.New/Get/Set/Remove -scope 1 또는 scope 0을 사용하거나 $global:a와 같은 스코프 수식어를 사용할 때 스코프 파라미터를 보다 쉽게 사용할 수 있으므로 데모(및 플레이)하기가 더 쉽습니다.
Get-Command -Noun variable -ParameterName scope
다른 답변들 중 일부는 정상 궤도에 있으며 별칭이 여러 범위에 존재한다는 사실을 확인했습니다.
하지만 만약 당신이 wget을 호출하려고 한다면요.일부 스크립트에서 Invoke-WebRequest(또는 wget.ps1)보다는 명령어를 호출할 때 ".exe" 확장자를 명령어 이름에 넣는 것이 가장 간단한 답일 수 있습니다.그렇게 하면 가명을 만지작거릴 필요가 없어요.
PowerShell 콘솔에서 스크립트를 실행하면 해당 세션의 별칭 드라이브가 상속되는 것 같습니다.그래서 만약 우리가 거기에 있다면 그것은 효과가 있고 그렇지 않으면 실패합니다.대신 새 프로세스에서 스크립트를 실행하면 일반적으로 스크립트가 제거됩니다.
데모에 사용한 코드는 다음과 같습니다.
Remove-Item -Path Alias:\wget -Force
wget
Start-Sleep -Seconds 100
시작-슬립은 콘솔이 즉시 닫히지 않도록 합니다.새로운 프로세스에서 스크립트를 실행해 보십시오.powershell.exe-file path to script'를 입력하여 실행 프롬프트와 PowerShell 자체를 사용했습니다.
언급URL : https://stackoverflow.com/questions/24347758/remove-alias-in-script
'programing' 카테고리의 다른 글
워드프레스 사용자 정의 테이블 또는 사용자 정의 게시물 유형? (0) | 2023.10.09 |
---|---|
오라클에서 인터벌 함수 (0) | 2023.10.09 |
동시에 여러 개의 Ajax 호출 (0) | 2023.10.04 |
WordPress : 기존 (생성된) HTML 페이지 통합 (0) | 2023.10.04 |
단추에서 테두리 제거 (0) | 2023.10.04 |