에서 PowerShell을 실행하는 방법NET 4 런타임?
를 관리하는 PowerShell 스크립트를 업데이트하고 있습니다.NET 어셈블리이 스크립트는 에 대해 빌드된 어셈블리용으로 작성되었습니다.NET 2(PowerShell이 실행되는 프레임워크와 동일한 버전)이지만 이제 와 함께 작동해야 합니다.및 NET 4 어셈블리.NET 2 어셈블리
.NET 4는 이전 버전의 프레임워크에 대해 구축된 애플리케이션을 실행할 수 있도록 지원하므로 가장 간단한 해결책은 를 사용하여 PowerShell을 실행하는 것입니다.에 대해서 실행할 필요가 있는 경우는, NET 4 런타임입니다.NET 4 어셈블리
에서 PowerShell을 실행하는 방법NET 4 런타임?
제가 찾은 최고의 솔루션은 블로그 게시물 Using New Version(s)에 있습니다.PowerShell 탑재 NET그러면 powershell.exe를 와 함께 실행할 수 있습니다.NET 4 어셈블리
작성)만 하면 .$pshome\powershell.exe.config하다
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
기타 빠른 셋업 노트:
장소와 파일은 플랫폼에 따라 다소 다릅니다.다만, 솔루션을 어떻게 기능시킬지에 대한 인라인 요지가 표시됩니다.
- PowerShell을 실행하면 수 .
cd $pshome(DOS 프롬프트에서는 동작하지 않습니다)- 경로는 다음과 같습니다(예시).
C:\Windows\System32\WindowsPowerShell\v1.0\
- 경로는 다음과 같습니다(예시).
- 과 같습니다.
powershell.exe.configPowerShell.exe실행 중입니다(필요한 경우 구성 파일을 만듭니다).- if
PowerShellISE.Exe중일 경우 .이 파일을 작성하려면 , 「동행 Configuration파일을 작성해야 합니다.PowerShellISE.Exe.config
- if
PowerShell(엔진)은 에서 정상적으로 동작합니다.NET 4.0. PowerShell(콘솔호스트 및 ISE)은 이전 버전에 대해 컴파일되었기 때문에 그렇지 않습니다.NET. 를 변경하는 레지스트리 설정이 있습니다.NET 프레임워크가 시스템 전체에 로드되어 PowerShell이 를 사용할 수 있게 됩니다.NET 4.0 클래스:
reg add hklm\software\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1
reg add hklm\software\wow6432node\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1
ISE만 업데이트하여 사용합니다.NET 4.0에서는 다음과 같이 구성 파일($psHome\powershell_ise.exe.config)을 변경할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0.30319" />
</startup>
</configuration>
을 빌드할 수 있습니다.PowerShell API(시스템)를 사용하여 PowerShell을 호출하는 NET 4.0 애플리케이션.관리.자동화PowerShell)은 문제 없습니다만, 이러한 단계를 통해 기본 제공 PowerShell 호스트를 에서 사용할 수 있습니다.NET 4.0.
레지스트리 키가 더 이상 필요하지 않을 때는 레지스트리 키를 제거합니다.이것들은 머신 전체의 키이며, 모든 애플리케이션을 로 강제 이행합니다.NET 4.0, .net 2 및 .net 3.5를 사용하는 어플리케이션도 지원
레지스트리 키 접근법에 매우 주의해 주십시오.이것들은 머신 전체의 키이며, 모든 애플리케이션을 로 강제 이행합니다.NET 4.0.
많은 제품이 강제로 이행되면 작동하지 않으며 이는 테스트 보조 도구일 뿐 생산 품질 메커니즘이 아닙니다.Visual Studio 2008 및 2010, MSBuild, turbotax 및 다수의 웹 사이트 SharePoint 등을 자동화해서는 안 됩니다.
PowerShell을 4.0과 함께 사용해야 하는 경우 구성 파일을 사용하여 애플리케이션별로 수행해야 하며 정확한 권장 사항에 대해 PowerShell 팀에 확인해야 합니다.이로 인해 일부 기존 PowerShell 명령이 중단될 수 있습니다.
에서 명령어, 스크립트블록 또는 스크립트파일을 1개만 실행할 필요가 있는 경우NET 4, 에서 Activation Configuration Files 를 사용해 보십시오.NET 4: CLR 버전 4를 사용하여 PowerShell의 단일 인스턴스만 시작합니다.
상세:
http://blog.codeassassin.com/2011/03/23/executing-individual-powershell-commands-using-net-4/
PowerShell 모듈의 예:
https://gist.github.com/882528
PowerShell v1.0 또는 v2.0을 계속 사용하고 있다면 Jason Stangroome의 훌륭한 답변에 대한 다양한 내용을 소개합니다.
작성하다powershell4.cmd다음과 같은 내용을 포함하는 경로의 어딘가에 있습니다.
@echo off
:: http://stackoverflow.com/questions/7308586/using-batch-echo-with-special-characters
if exist %~dp0powershell.exe.activation_config goto :run
echo.^<?xml version="1.0" encoding="utf-8" ?^> > %~dp0powershell.exe.activation_config
echo.^<configuration^> >> %~dp0powershell.exe.activation_config
echo. ^<startup useLegacyV2RuntimeActivationPolicy="true"^> >> %~dp0powershell.exe.activation_config
echo. ^<supportedRuntime version="v4.0"/^> >> %~dp0powershell.exe.activation_config
echo. ^</startup^> >> %~dp0powershell.exe.activation_config
echo.^</configuration^> >> %~dp0powershell.exe.activation_config
:run
:: point COMPLUS_ApplicationMigrationRuntimeActivationConfigPath to the directory that this cmd file lives in
:: and the directory contains a powershell.exe.activation_config file which matches the executable name powershell.exe
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath=%~dp0
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe %*
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath=
그러면 에서 실행되는 powershell 콘솔의 인스턴스를 시작할 수 있습니다.NET 4.0.
PowerShell 2.0을 탑재한 시스템에서 cmd에서 실행되는 다음 두 명령어의 출력을 조사하면 차이를 확인할 수 있습니다.
C:\>powershell -ExecutionPolicy ByPass -Command $PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
C:\>powershell4.cmd -ExecutionPolicy ByPass -Command $PSVersionTable
Name Value
---- -----
PSVersion 2.0
PSCompatibleVersions {1.0, 2.0}
BuildVersion 6.1.7601.17514
CLRVersion 4.0.30319.18408
WSManStackVersion 2.0
PSRemotingProtocolVersion 2.1
SerializationVersion 1.1.0.1
다음은 양쪽을 지원하기 위해 사용한 Configuration파일의 내용을 나타냅니다.NET 2.0 및NET 4 어셈블리:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- http://msdn.microsoft.com/en-us/library/w4atty68.aspx -->
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
또한 전달된 명령줄 인수로 스크립트를 실행하는 데 사용한 PowerShell 1.0 호환 코드의 간략화된 버전을 다음에 나타냅니다.
class Program {
static void Main( string[] args ) {
Console.WriteLine( ".NET " + Environment.Version );
string script = "& " + string.Join( " ", args );
Console.WriteLine( script );
Console.WriteLine( );
// Simple host that sends output to System.Console
PSHost host = new ConsoleHost( this );
Runspace runspace = RunspaceFactory.CreateRunspace( host );
Pipeline pipeline = runspace.CreatePipeline( );
pipeline.Commands.AddScript( script );
try {
runspace.Open( );
IEnumerable<PSObject> output = pipeline.Invoke( );
runspace.Close( );
// ...
}
catch( RuntimeException ex ) {
string psLine = ex.ErrorRecord.InvocationInfo.PositionMessage;
Console.WriteLine( "error : {0}: {1}{2}", ex.GetType( ), ex.Message, psLine );
ExitCode = -1;
}
}
}
처리와 에러 처리도 합니다.trap스크립트에 추가 진단 정보를 표시하는 스테이트먼트를 입력합니다(Jeffrey Snover의 Resolve-Error 함수와 유사).
다른 답변은 2012년 이전이며 PowerShell 1.0 또는 PowerShell 2.0을 새로운 버전의 대상으로 "해킹"하는 데 중점을 두고 있습니다.NET Framework and Common Language Runtime(CLR; 공통 언어 런타임)입니다.
그러나 많은 의견에서 언급되었듯이 2012년(PowerShell 3.0이 출시된 이후)부터 최신 버전의 PowerShell을 설치하는 것이 훨씬 더 나은 솔루션입니다.자동으로 CLR을 대상으로 합니다.v4.0.30319. 즉,NET 4.0, 4.5, 4.5.1, 4.5.2 또는 4.6(2015년 예상)은 모두 서로 인플레이스 치환된 버전이기 때문입니다.사용하다$PSVersionTable또는 설치된 PowerShell 버전 확인 스레드를 참조하십시오.편집: 스레드화.PowerShell 스크립트에서 사용하는 NET 버전
작성 시점의 PowerShell 최신 버전은 4.0이며 Windows Management Framework(Google 검색 링크)를 사용하여 다운로드할 수 있습니다.
실제로 를 사용하여 PowerShell을 실행할 수 있습니다.NET 4(다른 것에 영향을 주지 않습니다).NET 어플리케이션새로운 HttpWebRequest "Host" 속성을 사용하려면 이 작업을 수행해야 하는데, "OnlyUseLatestCLR"을 변경하면 Fiddler가 고장났습니다.넷 4
PowerShell 개발자는 이러한 상황을 예견하고 사용할 Framework 버전을 지정하는 레지스트리 키를 추가했습니다.한 가지 사소한 문제는 레지스트리 키를 변경하기 전에 소유권을 취득해야 한다는 것입니다.관리자라도 액세스 권한이 없기 때문입니다.
- HKLM:\소프트웨어\마이크로소프트\PowerShell\1\PowerShell엔진\RuntimeVersion (64비트 및 32비트)
- HKLM:\소프트웨어\Wow6432 노드\Microsoft\PowerShell\1\PowerShell엔진\RuntimeVersion (64비트 머신에서는 32비트)
해당 키의 값을 필요한 버전으로 변경합니다.단, 일부 스냅인은 이 아니면 로딩되지 않을 수 있습니다.NET 4 대응 (WASP만이 문제가 있었습니다만, 어쨌든 잘 사용하지 않습니다.)VMware, SQL Server 2008, PSCX, Active Directory(Microsoft 및 Quest 소프트웨어) 및 SCOM은 모두 정상적으로 동작합니다.
레지스트리 파일 또는 app.config 파일을 수정하지 않을 경우 단순 파일을 작성하는 방법도 있습니다.PowerShell.exe 기능을 모방하여 PowerShell ConsoleShell을 호스트하는 NET 4 콘솔 앱.
옵션 2 – Windows PowerShell 호스팅을 직접 참조하십시오.
먼저 시스템에 대한 참조를 추가합니다.관리.자동화 및 Microsoft.PowerShell.%programfiles%\에 있는 ConsoleHost 어셈블리참조 어셈블리\Microsoft\Windows PowerShell\v1.0
그런 다음 다음 코드를 사용합니다.
using System;
using System.Management.Automation.Runspaces;
using Microsoft.PowerShell;
namespace PSHostCLRv4
{
class Program
{
static int Main(string[] args)
{
var config = RunspaceConfiguration.Create();
return ConsoleShell.Start(
config,
"Windows PowerShell - Hosted on CLR v4\nCopyright (C) 2010 Microsoft Corporation. All rights reserved.",
"",
args
);
}
}
}
다른 옵션과 마찬가지로 최신 PoshConsole 릴리스에는 를 대상으로 하는 바이너리가 포함되어 있습니다.NET 4 RC(RTM 릴리스에서는 정상적으로 동작)를 설정하지 않습니다.
powershell를 powershell.exe와 함께 .COMPLUS_version가 「」로 되어 있다.v4.0.30319 cmd 또는 입니다. "cmd.exe" ".bat" :
set COMPLUS_version=v4.0.30319
powershell -file c:\scripts\test.ps1
언급URL : https://stackoverflow.com/questions/2094694/how-can-i-run-powershell-with-the-net-4-runtime
'programing' 카테고리의 다른 글
| SQL Server:batching 스테이트먼트('GO' 사용)는 어떤 용도로 유효합니까? (0) | 2023.04.23 |
|---|---|
| Azure 서비스 버스 큐에 있는 메시지 수 확인 (0) | 2023.04.23 |
| Microsoft 파일 또는 어셈블리를 로드할 수 없습니다.AI.Web' 또는 그 종속성 중 하나.지정된 파일을 찾을 수 없습니다. (0) | 2023.04.23 |
| STA 스레드를 실행하는 태스크(TPL)를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.23 |
| SQL Server 연결 문자열에서 "초기 카탈로그"의 요점은 무엇입니까? (0) | 2023.04.23 |