PowerShell入门教程之远程操作运行PowerShell的方法

PowerShell远程操作是远程管理的基础,它为集中管理分布式系统提供了又一种可靠、高效的方法。

  一般来说PowerShell远程操作依赖于远程处理基础结构,但为数不多的几个自身具有远程处理能力的命令除外,如Get-Service、Get-Process、Get-WMIObject、Get-EventLog和Get-WinEvent等。(不难看出,这些命令都是“读取”系统的某些方面的信息,不做更改。它们依赖.Net Framework完成远程操作。)

配置远程基础结构

  远程基础结构是远程操作的基础,正确设置远程基础结构才能使远程命令正确执行。好在远程基础结构虽然重要,但是配置起来非常简单。实际上,只要设置好以下两点就可以进行远程操作了:

  1、以管理员身份运行。要进行远程操作,必须以管理员身份启动PowerShell命令行,即使当前用户是系统管理员也要如此。

  2、启用远程处理模式。启用远程处理模式之后,依赖远程基础结构的命令才能正确执行。启用远程处理模式请使用enable-psremoting命令。有的系统默认已经开启了远程处理模式,检查远程处理模式是否启动,可以执行new-pssession命令。如果新的会话成功创建,则说明远程模式启动,远程基础结构配置成功。

执行远程操作

  配置好远程基础结构,就可以执行远程操作了。远程操作主要依赖几个Session(会话)命令和Invoke-Command命令来进行。常见的使用情况有三种场景:

  场景一:远程交互式会话

  这个场景一般用于手动进行远程操作,输入命令,查看结果。方法很简单。进入交互式会话的命令是Enter-PSSession,退出时键入Exit-PSSession或者exit都可以。远程交互式操作期间,输入的命令在远程计算机上运行,就像直接在远程计算机上输入并执行这些命令一样。期间所定义的变量和命令的执行结果在退出交互式会话之后不再可用。

  场景二:脚本块、脚本文件的一次性执行

  这种场景,是在本地计算机与远程计算机上建立一个临时会话。将脚本块或者脚本文件的内容发送到远程计算机执行,并将结果发回本地计算机。这种方法执行效率很高,是PowerShell推荐的执行远程命令的方法。除非需要在会话中共享数据,否则建议使用该方法。

  场景三:脚本块、脚本文件在命名会话中执行

  这种场景是最复杂的,也是功能最强大的。会话会保持所有定义的变量、函数和脚本,导入的模块和管理单元,有利于共享数据。使用方法如下:

  1、定义会话: 请使用new-pssession命令定义会话,如$session1 = new-pssession –computer server1。(如果必要请使用Credential参数。)

  2、在会话中远程执行脚本(或者脚本文件): 请使用Invoke-Command命令执行远程脚本,如Invoke-Command -Session $session1 -ScriptBlock {dir c:\}或者Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1

  3、获得结果: 可以将执行结果赋于变量,如$sub = Invoke-Command -Session $session1 -ScriptBlock {dir c:\}或者$sub = Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1

  后续命令可参照步骤2或者3继续执行,所有执行的命令就好像在同一个上下文中执行一样。

结语

  网络时代的Shell或者脚本语言必须具有很强的网络处理能力,PowerShell就是这样的语言。微软的产品一般来说将安全性看得很重,所以PowerShell在网络处理方面有诸多限制。比如PowerShell不能在远程机器上显示界面,即使是有界面的程序,也只能在后台运行。熊掌和鱼肉不可兼得,好在我们总能找到一些解决办法。比如上述问题可以借助微软的PsExec工具来实现,详细信息见Windows Sysinternals.

(0)

相关推荐

  • 使用HTTP api简单的远程执行PowerShell脚本

    可能有些情况下,你不想完全体验通过PSRP(PowerShell远程处理协议)远程管理,或有需要从非Windows系统上执行一些PowerShell脚本.你可能会像我很久之前在这篇文章中写的那样直接基于WS-Man来写代码.但是那样很复杂,并且需要WS-Man和SOAP的一些知识. 我在PowerShell脚本中使用.Net HttpListener类写了个HTTP监听器.你可以非常简单地启动一个监听器的实例(需要提升权限监听网络),现在你可以执行任意的PowerShell命令了,它还可以返回多

  • PowerShell远程安装MSI安装包、EXE可执行程序的方法

    尽管对IT管理员或者开发者来讲,这是一个很常见的任务,但是在网上能找到"远程安装一个msi包或者exe应用程序"的相关文档还是比较少的.甚至有人在一些论坛的评论中写道,这不可能实现.事实上还是可以的.我会在本文提供两段代码,分别负责远程安装MSI包和EXE可执行应用程序. 一.安装MSI包 使用PowerShell调用WMI对象,你可以执行下面的脚本来安装你的MSI安装包: 复制代码 代码如下: $box="deviis01" #this is the name o

  • Powershell小技巧之非相同域或信任域也能远程

    默认通过Enable-PSRemoting打开PS远程,启动了Kerberos认证.这个方法只适合两台电脑在相同域或信任域内的指定电脑(名字可以带后缀).但它不支持跨域.域外或IP地址. 要让它能正常工作,你需要改变计算机的远程方式.请用管理员权限执行下面命令: 复制代码 代码如下: PS> Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force 如果这个路径非法,你可能首先需要在电脑上打开PS远程(使用"Enable-P

  • Powershell小技巧--远程对比服务配置

    假如你的PS远程运行在两台服务器上,这里有一个简单的脚本教你怎么从每台服务器上得到所有的服务状态并计算他们之间的差别. 复制代码 代码如下: $Server1 = 'myServer1' $Server2 = 'someOtherServer'   $services1 = Invoke-Command { Get-Service } -ComputerName $Server1 |   Sort-Object -Property Name, Status   $services2 = Invo

  • Powershell小技巧之开启关闭远程连接

    如果你要通过Powershell远程访问电脑.这时你必须在对方电脑(你想要访问的电脑),用管理员权限执行下面代码: 复制代码 代码如下: PS> Enable-PSRemoting -SkipNetworkProfileCheck -Force 一旦你这样执行了代码,你只要拥有目标电脑的本地管理员权限就能从其它窗体访问这台电脑了.当两台电脑在同一个域内你就可以直接指定计算机名而不需要它的IP的地址. 启动交互方式: 复制代码 代码如下: PS> Enter-PSSession -Compute

  • PowerShell小技巧之添加远程防火墙规则

    接着昨天的场景,虽然将Windows Server 2012 Core的默认控制台设置成了PowerShell,还启用了远程桌面,但是对于Core版本的服务器来讲,远程桌面形同鸡肋,所以我想启用PowerShell远程访问,在服务器上以管理员权限运行: Enable-PSRemoting -Force 在尝试建立远程连接时,提示访问被拒绝,此时可能是防火墙问题:我需要使用PowerShell添加PowerShell远程防火墙规则: New-NetFirewallRule -Name powers

  • PowerShell小技巧之启动远程桌面连接

    以Windows Server 2012 R2为例,其实非常简单.先启用远程连接: (gwmi -class win32_terminalservicesetting -namespace "root\cimv2\terminalservices").setallowtsconnections(1) 然后再启用几条防火墙规则即可,用PowerShell(需要管理员权限)更显其威武: PS> Get-NetFirewallRule -Name RemoteDesktop* | se

  • PowerShell入门教程之远程操作运行PowerShell的方法

    PowerShell远程操作是远程管理的基础,它为集中管理分布式系统提供了又一种可靠.高效的方法. 一般来说PowerShell远程操作依赖于远程处理基础结构,但为数不多的几个自身具有远程处理能力的命令除外,如Get-Service.Get-Process.Get-WMIObject.Get-EventLog和Get-WinEvent等.(不难看出,这些命令都是"读取"系统的某些方面的信息,不做更改.它们依赖.Net Framework完成远程操作.) 配置远程基础结构 远程基础结构是

  • PowerShell入门教程之创建和使用配置文件实例

    在命令行中定义别名.变量和函数,只是将它们添加在当前PowerShell的会话中.退出会话后,这些更改就会丢失.想要在以后的会话中也能使用它们,就要将它们定义在配置文件中. 配置文件 PowerShell的配置文件,不像Windows操作系统中那样使用.ini文件,也不像多数应用程序那样使用XML文件.PowerShell的配置文件都是些普通的PowerShell脚本文件.需要注意的是,这些配置文件的文件名是固定.不能更改的.并且它们受到脚本执行策略的约束,就是说在默认情况下,也就是脚本执行策略

  • PowerShell入门教程之快速学习PowerShell的几个方法

    如何快速地掌握PowerShell呢?总的来说,就是要尽可能多的使用它,就像那句谚语说的:Practice makes perfect.当然这里还有一些原则和方法让我们可以遵循. 有效利用交互式环境 一般来说,PowerShell有两个主要的运行环境:PowerShell和PowerShell ISE.前者是PowerShell的运行环境,后者是PowerShell集成脚本环境,也就是编写脚本(.ps1)的地方.当然,你也可以使用记事本或者其他编辑器来编写脚本.对于初学者来说,一上来就写脚本绝对

  • PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法

    单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因.或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务.本文的讨论范围是Cmd命令与PowerShell命令之间的组合与调用. 毋庸置疑,Cmd命令与PowerShell命令之间的调用有两个方向.即在Cmd命令中调用PowerShell的命令,以及在PowerShell脚本中调用Cmd命令.需要说明的是,这里的调用分两个层次:一.简单的在其中一个的环境中执行另外一个命令,完成部分工作:二.在其中一个的执行上

  • nodejs入门教程三:调用内部和外部方法示例

    本文实例讲述了nodejs入门教程之调用内部和外部方法.分享给大家供大家参考,具体如下: 1.创建fun.js var fun3 = require('./fun3'); var fun2 = require('./fun2'); function fun1(){ console.log("我是fun1"); //exports的方式:exports 是给 module.exports 添加属性和方法 //fun2.obj.add(1,2); //fun3.print(); //mod

  • PowerShell入门教程之高效使用PowerShell交互式运行环境的几个小技巧

    在开始关于脚本.对象和远程处理等复杂的功能之前,一直想再写一篇关于交互式运行环境的文章.因为我觉得这很重要,但是有什么是不重要呢?:)所以,说到底可能是个人喜好吧,我就是特别喜欢这种立等可取的交互方式. 如何高效地使用PowerShell的交互式运行环境呢?所谓"高效",既跟使用这个工具的熟练程度有关,也跟使用这个工具的习惯有关.习惯有无意中养成的,也有主动养成的.如果你恰好玩PowerShell不久,那么就从现在开始主动养成一些好习惯吧. 多用Tab键 在运行环境中,Tab键有补全内

  • PowerShell入门教程之访问.Net程序集、COM和WMI实例

    PowerShell可以设计的大而全,重新实现一切:也可以像现在一样设计成胶水语言,利用现有的资源.特别是,与.Net.COM和WMI三大豪门的联姻,使得PowerShell必将在Windows世界里大放光彩. 与新锐.Net联姻 在Windows的世界里,.Net代表着现在和将来,是新生力量.与.Net联姻,就意味着榜上了粗腿,迈上了快车道.号称基于.Net Framework,那么使用.Net的基类就易如反掌.基本步骤如下:1.添加类所在程序集:2.创建类的实例:3.调用实例的函数或者属性.

  • PowerShell入门教程之编写和使用脚本模块实例

    现在通过编写模块就可以在PowerShell命令行或者脚本中管理大型.分布式软件系统,就像Exchange Server和SharePoint Server正在做的那样.你有这样的需求吗? 模块.脚本模块 模块是PowerShell V2中引入的概念,用以改进之前提出的"管理单元".将管理单元也作为模块(二进制模块)处理之后,PowerShell中就包括两种模块--脚本模块和二进制模块.那么什么是模块呢?模块就是包含一些PowerShell命令.项的程序包,它以一个整体被分发共享和加载

  • PowerShell入门教程之函数、脚本、作用域介绍

    脚本所体现的是PowerShell的编程特性,是任务自动化的基础.函数是比脚本粒度更细的代码复用单元,可以定义在命令行中或者脚本中.作用域就是变量和函数的作用范围,是执行上下文的划分. 函数 函数就是命名的命令列表,与一般编程语言中的函数概念具有相同的范畴.函数中不但可以有简单命令,还可以有控制流程的命令,如if.while.switch等.函数可以有匿名参数或者命名参数列表.命令参数列表可以用大括号或者Param关键字定义.匿名函数可以使用$Args变量来访问.函数也可接收来自管道的对象作为输

  • AngularJS入门教程之模块化操作用法示例

    本文实例讲述了AngularJS模块化操作用法.分享给大家供大家参考,具体如下: 在前面几节教程中,代码比较少,为了方便说明问题笔者將控制器代码都写在了HTML页面中,实际上这并不是什么好的编程习惯,而且可维护性差.通常的做法都是將处理业务逻辑的代码写在一个单独的JS文件中,然后在HTML页面中引入该文件. 然而这样会带来新的问题,我们的控制器全都定义在全局的命名空间中,假设我们有一个公共的JS文件,在登录页面和密码修改页面都引入这个JS,A开发人员和B开发人员英雄所见略同,对控制器的命名都是U

随机推荐