Windows Powershell 执行文件和脚本_PowerShell

象运行可执行文件一样,Powershell运行文件和脚本,也必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中。

关于脚本
脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器能够解释和执行的命令行代码。

执行批处理文件
批处理是扩展名为”.bat”的文本文件,它可以包含任何cmd控制台能够处理的命令。当批处理文件被打开,Cmd控制台会逐行执行每条命令。那Powershell能够直接执行批处理吗?
将下列命令保存为ping.bat

@echo off
echo batch File Test
pause
Dir %windir%/system

然后执行ping
屏幕会打印ping命令帮助,说明调用的ping cmd 而不是ping.bat。
改为:

PS C:\PS> ./ping
batch File Test
Press any key to continue . . .
 Volume in drive C has no label.
 Volume Serial Number is 4E9B-D846

 Directory of C:Windowssystem

2009/06/11 05:21   69,584 avicap.dll
2009/06/11 05:21   109,456 avifile.dll
2009/07/14 05:41   32,816 COMMDLG.DLL
2009/07/14 05:41    2,000 keyboard.drv
2009/06/11 05:42    9,936 lzexpand.dll
2009/06/11 05:21   73,376 mciavi.drv
2009/06/11 05:21   25,264 mciseq.drv
2009/06/11 05:21   28,160 mciwave.drv
2009/07/14 05:41   68,992 MMSYSTEM.DLL
2009/07/14 05:41    1,152 mmtask.tsk
2009/07/14 05:41    2,032 mouse.drv
2009/06/11 05:21   126,912 msvideo.dll
2009/06/11 05:42   82,944 olecli.dll
2009/07/14 05:41   24,064 OLESVR.DLL
2009/07/14 05:41    5,120 SHELL.DLL
2009/07/14 05:41    1,744 sound.drv
2009/06/11 05:25    5,532 stdole.tlb
2009/07/14 05:41    3,360 system.drv
2009/07/14 05:41    4,048 TIMER.DRV
2009/06/11 05:42    9,008 ver.dll
2009/07/14 05:41    2,176 vga.drv
2009/07/14 05:41   12,704 WFWNET.DRV
    22 File(s)  700,380 bytes
    2 Dir(s) 75,927,420,928 bytes free

这时运行的是批处理。

通过cmd进入cmd控制台输入ping发现执行的不是ping命令,而是直接运行ping.bat ,也就是说可以通过.bat 覆盖cmd命令。这种机制很危险,如果有人侵入电脑,并将系统内部命令篡改成自己批处理,那就太悲剧了。 这种命令与脚本的混淆不会发生在powershell中,因为powershell有更安全的机制。

执行VB脚本文件
将下列命令保存为test.vbs

Set wmi = GetObject("winmgmts:")
Set collection = wmi.ExecQuery("select * from Win32_Process")
For Each process in collection
WScript.Echo process.getObjectText_
Next

执行 .\test.vbs 会遍历当前Win32进程,并把每个进程的详细信息通过窗口显示出来。
怎样让VB脚本的通过控制台输出呢?
Wscript //H:CScript
怎样还原VB脚本通过窗口输出呢?
WScript //H:WScript
在powershell中执行VB脚本

PS C:\PS> cscript.exe .test.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

instance of Win32_Process
{
  Caption = "System Idle Process";
  CreationClassName = "Win32_Process";
  CSCreationClassName = "Win32_ComputerSystem";
  CSName = "test-me-01";
  Description = "System Idle Process";
  Handle = "0";
  HandleCount = 0;
  KernelModeTime = "484113379271";
  Name = "System Idle Process";
  OSCreationClassName = "Win32_OperatingSystem";
  OSName = "Microsoft Windows 7 Enterprise |C:Windows|DeviceHarddisk0Partition2";
  OtherOperationCount = "0";
  OtherTransferCount = "0";
  PageFaults = 0;
  PageFileUsage = 0;
  ParentProcessId = 0;
  PeakPageFileUsage = 0;
  PeakVirtualSize = "0";
  PeakWorkingSetSize = 0;
  Priority = 0;
  PrivatePageCount = "0";
  ProcessId = 0;
  QuotaNonPagedPoolUsage = 0;
  QuotaPagedPoolUsage = 0;
  QuotaPeakNonPagedPoolUsage = 0;
  QuotaPeakPagedPoolUsage = 0;
  ReadOperationCount = "0";
  ReadTransferCount = "0";
  SessionId = 0;
  ThreadCount = 2;
  UserModeTime = "0";
  VirtualSize = "0";
  WindowsVersion = "6.1.7601";
  WorkingSetSize = "24576";
  WriteOperationCount = "0";
  WriteTransferCount = "0";
};

执行powershell脚本
Powershell拥有自己的脚本,扩展名为“.ps1”

PS C:\PS> echo "dir;Get-PSProvider;help dir" >test.ps1
PS C:\PS> Get-Content ./test.ps1
dir;Get-PSProvider;help dir
PS C:\PS> ./test.ps1初次执行脚本时,可能会碰到一个异常:
File ” C:\PS\test.ps1″ cannot be loaded because the
execution of scripts is disabled on this system. Please see
“get-help about_signing” for more details.
At line:1 char:10
+ .test.ps1 <<<<

这是powershell的默认安全设置禁用了执行脚本,要启用这个功能需要拥有管理员的权限。

开启:set-executionpolicy remotesigned

关闭:Set-ExecutionPolicy Restricted

Powershell调用入口的优先级
别名:控制台首先会寻找输入是否为一个别名,如果是,执行别名所指的命令。因此我们可以通过别名覆盖任意powershell命令,因为别名的优先级最高。

函数:如果没有找到别名,会继续寻找函数,函数类似别名,只不过它包含了更多的powershell命令。因此可以自定义函数扩充cmdlet 把常用的参数给固化进去。

命令:如果没有找到函数,控制台会继续寻找命令,即cmdlet,powershell的内部命令。

脚本:没有找到命令,继续寻找扩展名为“.ps1”的Powershell脚本。

文件:没有找到脚本,会继续寻找文件,如果没有可用的文件,控制台会抛出异常。

The term ‘now' is not recognized as the name of a cmdlet, function, script file, or operable program. Chec
g of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:4
+ now <<<<
+ CategoryInfo : ObjectNotFound: (now:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索windows
, 脚本
, powershell
执行文件
powershell 执行脚本、powershell 脚本文件、powershell 执行文件、windows执行shell脚本、windows下执行sh脚本,以便于您获取更多的相关知识。

时间: 2024-10-30 10:50:29

Windows Powershell 执行文件和脚本_PowerShell的相关文章

Windows Powershell 执行外部命令_PowerShell

Powershell 能够像CMD一样很好的执行外部命令. 通过netstat查看网络端口状态 PS C:\PS> netstat Active Connections Proto Local Address Foreign Address State TCP 192.168.0.100:3049 192.168.0.88:7575 ESTABLISHED TCP 192.168.0.100:3052 192.168.0.88:7575 ESTABLISHED TCP 192.168.0.100

Windows Powershell对象转换成文本_PowerShell

Out-Default可以将对象转换成可视的文本.事实上Out-Default会首先调用Format-Table,将更多的属性默认隐藏.再调用Out-Host将结果输出在控制台上.因此下面的三组命令执行结果是相同的. ls ls | Format-Table | Out-Host ls | Out-Default 显示隐藏的对象属性 要查看对象结果的所有属性,可是使用 ls | Format-Table * 这样因为属性和属性的内容太多可能不会显示完全,可以使用文本换行参数 ls | Forma

Windows Powershell 通过函数扩展别名_PowerShell

在Powershell中设置别名的确方便快捷,但是在设置别名的过程中并设置参数的相关信息.尽管别名会自动识别参数,但是如何把经常使用的参数默认设定在别名里面呢?例如Test-Connection -Count 2 -ComputerName,让-"-Count 2″ 固化在别名中. 这时简单的别名无法完成上述需求,可以通过函数来完成它,并且一旦把函数拉过来,定义别名会变得更加灵活. PS C:\PS> function test-conn { Test-Connection -Count

Windows Powershell使用哈希表_PowerShell

哈希表存放的是对,在哈希表中不再仅仅限制使用数字寻址,可以使用任意类型的数据类型寻址. 创建哈希表 之前使用@()创建数组,现在使用@{}创建哈希表,使用哈希表的键访问对应的值. PS C:Powershell> $stu=@{ Name = "小明";Age="12";sex="男" } PS C:Powershell> $stu Name Value ---- ----- Name 小明 Age 12 sex 男 PS C:Pow

Windows Powershell 变量的幕后管理_PowerShell

在Powershell中创建一个变量,会在后台生成一个PSVariable对象,这个对象不仅包含变量的值,也包含变量的其它信息,例如"只写保护"这样的描述. 如果在Powershell中输出一个变量,只会输出这个变量的值.不能够显示它的其它信息,如果想查看一个变量的其它保留信息,就需要变量的基类PSVariable对象,这个可以通过Get-Variable命令得到,下面的例子演示如何查看一个变量的全部信息. PS> $a=get-date PS> Get-Variable

Powershell直接脚本时出现无法加载文件因为禁止执行脚本_PowerShell

在Powershell直接脚本时会出现: 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing". 所在位置 行:1 字符: 17 + E:\Test\test.ps1 <<<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException 查

测试运行: 使用Windows PowerShell实现UI自动化

尽管问世时间相对较短,但 Windows PowerShellTM 已经成为我最喜爱的工具之一.我最近发现,Windows PowerShell 拥有创建小型库所需的全部功能,您可以使用这些功能编写超轻型的 UI 自动化代码. 在本月的专栏中,我将介绍如何创建一个小型的自定义 Windows PowerShell cmdlet 集合,以执行 Windows UI 自动化任务.其中包括获得应用程序和控件的句柄.操作控件以及检查应用程序状态.在本次讨论中,我将假设您对 Windows PowerSh

PowerShell实现的文件同步脚本分享_PowerShell

#分别定义源.目标文件夹,注意大小写敏感 $folder_a_path = "D:\a" $folder_b_path = "D:\b" #遍历源文件夹下所有文件 $folders_a = gci $folder_a_path -Recurse foreach ($folder_a in $folders_a) { #通过替换的方式,取目标文件的全路径名称 $b = $folder_a.fullname.replace($folder_a_path,$folder_

PowerShell包含另一个脚本文件和获取当前脚本所在目录的方法例子_PowerShell

本文介绍在PowerShell脚本中,如何获取脚本文件(.ps1文件)所在的目录.本文介绍在方法适用于PowerShell 3.0. 在PowerShell 3.0中,有一个变量可以很方便的获取脚本所在的目录.我们在e:\ps\script1.ps1和script2.ps1,内容分别如下: script1.ps1内容: 复制代码 代码如下: Write-Host "This is script1.ps1" Write-Host "Let me call script2.ps1