[POWERSHELL] Restart-Computer 명령 : -ComputerName 스위치를 사용해 컴퓨터 재시작하기
■ Restart-Computer 명령에서 -ComputerName 스위치를 사용해 컴퓨터를 재시작하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Restart-Computer -Computer server01,server02 |
■ Restart-Computer 명령에서 -ComputerName 스위치를 사용해 컴퓨터를 재시작하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Restart-Computer -Computer server01,server02 |
■ Copy-Item 명령에서 -Destination/-FromSession 스위치를 사용해 원격 컴퓨터에서 복사하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 |
$Session = New-PSSession -ComputerName "server01" -Credential "password\userid" Copy-Item "d:\remoteSource\sample.txt" -Destination "d:\sourceTarget" -FromSession $Session |
■ Copy-Item 명령에서 -Destination/-ToSession 스위치를 사용해 원격 컴퓨터에 복사하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 |
$Session = New-PSSession -ComputerName "server01" -Credential "password\userid" Copy-Item "d:\localSource\sample.txt" -Destination "d:\remoteTarget" -ToSession $Session |
■ Invoke-Command 명령에서 -ComputerName/-ScriptBlock 스위치를 사용해 원격 명령을 실행하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 |
$ServiceName = "WinRM" Invoke-Command -ComputerName "127.0.0.1" -ScriptBlock {Get-Service -Name $ServiceName} |
■ -ComputerName 스위치를 사용하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 6 7 |
-ComputerName ONE,TWO,THREE -Credential king -ComputerName (Get-Content d:\computerName.txt) -Credential king -ComputerName (Import-Csv d:\computerName.csv | Select-Object -Expand Computer) -Credential king |
■ Invoke-Command 명령에서 -ComputerName/-Credential/-ScriptBlock 스위치를 사용해 원격 명령을 실행하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Invoke-Command -ComputerName "127.0.0.1" -Credential king -ScriptBlock {Get-UICulture} |
■ Exit-PSSession 명령을 사용해 원격 접속을 종료하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Exit-PSSession |
■ Enter-PSSession 명령에서 -ComputerName/-Credential 스위치를 사용해 1:1 원격 접속을 시작하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Enter-PSSession -ComputerName 127.0.0.1 -Credential king |
■ Disable-PSRemoting 명령을 사용해 원격 관리를 비활성화하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Disable-PSRemoting |
■ Set-Item 명령을 사용해 TrustedHosts 리스트를 지우는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "" |
■ Enable-PSRemoting 명령에서 -SkipNetworkProfileCheck/-Force 스위치를 사용해 원격 관리를 활성화하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Enable-PSRemoting -SkipNetworkProfileCheck -Force |
■ Get-Item 명령을 사용해 TrustedHosts 리스트를 구하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Get-Item WSMan:\localhost\Client\TrustedHosts |
■ Set-Item 명령을 사용해 TrustedHosts 리스트를 설정하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 |
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.100.11" Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.100.11,192.168.100.13" Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" |
■ Get-ChildItem 명령을 사용해 WSMan 공급자를 통해 WS-Management 구성 데이터 저장소에서 TrustedHosts 리스트를 구하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Get-ChildItem WSMan:\localhost\Client\TrustedHosts |
■ 닷넷 리모팅을 사용하는 방법을 보여준다. [서버 실행 프로그램] [클라이언트 실행 프로그램] [TestRemotingServer 프로젝트] ▶ HelloWorldService.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
using System; using System.Text; namespace TestRemotingServer { /// <summary> /// Hello World 서비스 /// </summary> public class HelloWorldService : MarshalByRefObject { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region Hello 말하기 - SayHello() /// <summary> /// Hello 말하기 /// </summary> /// <returns>Hello</returns> public string SayHello() { Console.WriteLine("클라이언트 요청 처리를 시작합니다."); StringBuilder stringBuilder = new StringBuilder(); for(int i = 0; i < 50000; i++) { stringBuilder.Append("0123456789"); } Console.WriteLine("클라이언트 요청 처리를 종료합니다."); return stringBuilder.ToString(); } #endregion } } |
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using System.Runtime.Remoting.Channels.Http; using System.Runtime.Remoting.Channels.Ipc; namespace TestRemotingServer { /// <summary> /// 프로그램 /// </summary> public class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { Console.WriteLine("닷넷 리모팅 서버 애플리케이션..."); TcpChannel tcpChannel = new TcpChannel(8080); HttpChannel httpChannel = new HttpChannel(8088); IpcChannel ipcChannel = new IpcChannel("192.168.0.2:8089"); ChannelServices.RegisterChannel(tcpChannel , false); ChannelServices.RegisterChannel(httpChannel, false); ChannelServices.RegisterChannel(ipcChannel , false); RemotingConfiguration.RegisterWellKnownServiceType ( typeof(HelloWorldService), "HelloWorldService.rem", WellKnownObjectMode.SingleCall ); Console.WriteLine("서비스 중단을 위해 아무 키나 누르시기 바랍니다..."); Console.ReadKey(); } #endregion } } |
[TestRemotingClient 프로젝트]
■ 원격으로 문자를 복사하는 방법을 보여준다. [TestLibrary 프로젝트] ▶ Cache.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
namespace TestLibrary { /// <summary> /// 캐시 /// </summary> public class Cache { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 캐시 /// </summary> private static Cache _cache = null; /// <summary> /// 관찰자 /// </summary> private static IObserver _observer; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Public #region 부착하기 - Attach(observer) /// <summary> /// 부착하기 /// </summary> /// <param name="observer">관찰자</param> public static void Attach(IObserver observer) { _observer = observer; } #endregion #region 인스턴스 구하기 - GetInstance() /// <summary> /// 인스턴스 구하기 /// </summary> /// <returns>캐시</returns> public static Cache GetInstance() { if(_cache == null) { _cache = new Cache(); } return _cache; } #endregion ////////////////////////////////////////////////////////////////////////////////////////// Instance //////////////////////////////////////////////////////////////////////////////// Public #region 메시지 설정하기 - SetMessage(message) /// <summary> /// 메시지 설정하기 /// </summary> public void SetMessage(string message) { _observer.Notify(message); } #endregion } } |
▶ IObserver.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
namespace TestLibrary { /// <summary> /// 관찰자 인터페이스 /// </summary> public interface IObserver { //////////////////////////////////////////////////////////////////////////////////////////////////// Method #region 통지하기 - Notify(message) /// <summary> /// 통지하기 /// </summary> /// <param name="message">메시지</param> void Notify(string message); #endregion } } |
▶ RemotableObject.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; namespace TestLibrary { /// <summary> /// 원격 객체 /// </summary> public class RemotableObject : MarshalByRefObject { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 메시지 설정하기 - SetMessage(message) /// <summary> /// 메시지 설정하기 /// </summary> /// <param name="message">메시지</param> public void SetMessage(string message) { Cache.GetInstance().SetMessage(message); } #endregion } } |
[TestServer 프로젝트] ▶ MainForm.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using System.Windows.Forms; using TestLibrary; namespace TestServer { /// <summary> /// 메인 폼 /// </summary> public partial class MainForm : Form, IObserver { //////////////////////////////////////////////////////////////////////////////////////////////////// Delegate ////////////////////////////////////////////////////////////////////////////////////////// Private #region 메시지 설정하기 대리자 - SetMessageDelegate(message) /// <summary> /// 메시지 설정하기 대리자 /// </summary> /// <param name="message">메시지</param> private delegate void SetMessageDelegate(string message); #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// TCP 서버 채널 /// </summary> private TcpServerChannel tcpServerChannel = null; /// <summary> /// 메시지 설정하기 대리자 /// </summary> private SetMessageDelegate setMessageDelegate = null; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainForm() /// <summary> /// 생성자 /// </summary> public MainForm() { InitializeComponent(); } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 통지하기 - Notify(message) /// <summary> /// 통지하기 /// </summary> /// <param name="message">메시지</param> public void Notify(string message) { Invoke(this.setMessageDelegate, message); } #endregion ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 폼 로드시 처리하기 - Form_Load(sender, e) /// <summary> /// 폼 로드시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void Form_Load(object sender, EventArgs e) { this.setMessageDelegate = new SetMessageDelegate(SetMessage); } #endregion #region 시작 버튼 클릭시 처리하기 - startButton_Click(sender, e) /// <summary> /// 시작 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void startButton_Click(object sender, EventArgs e) { this.serverNameTextBox.Enabled = false; this.portTextBox.Enabled = false; this.tcpServerChannel = new TcpServerChannel(Convert.ToInt32(this.portTextBox.Text)); ChannelServices.RegisterChannel(this.tcpServerChannel, true); RemotingConfiguration.RegisterWellKnownServiceType ( typeof(RemotableObject), this.serverNameTextBox.Text, WellKnownObjectMode.Singleton ); TestLibrary.Cache.Attach(this); this.statusToolStripStatusLabel.Text = "상태 : 채널(" + this.tcpServerChannel.ChannelName + "), 수신중..."; } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region 메시지 설정하기 - SetMessage(message) /// <summary> /// 메시지 설정하기 /// </summary> /// <param name="message">메시지</param> private void SetMessage(string message) { this.messageTextBox.Text = message; } #endregion } } |