差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
itwiki:windows-powershell [2024/01/06 06:23] – 修改小标题 ovwx@live.ioitwiki:windows-powershell [Unknown date] (当前版本) – 移除 - 外部编辑 (Unknown date) 127.0.0.1
行 1: 行 1:
-====== Windows Powershell 基本使用 ====== 
- 
-====== 实现操作系统功能 ====== 
- 
-===== 进程管理 ===== 
- 
-==== 启动进程 ==== 
- 
-PowerShell 指定工作目录并隐藏窗口 
- 
-<code> 
-Powershell -WindowStyle Hidden -command start -WindowStyle Hidden -WorkingDirectory C:\Portable\aria2-1.36.0-win-64bit-build1\ .\aria2c.exe -arg '--conf-path=aria2.conf' 
-</code> 
- 
-  * -WindowStyle 窗口风格, Hidden为隐藏窗口 
-  * -WorkingDirectory 工作目录 
-  * -Arg arg1,arg2,arg3 传递给进程的参数表 
-  * -RedirectStandardOutput 将标准输出重定向到文件,适合于需要保存控制台输出为日志的文件 
- 
-修改窗口风格是为了使得程序隐藏运行,因为一个命令行程序不隐藏运行会有一个黑乎乎的窗口,看着不好。 
- 
-修改工作目录是有些应用会在工作目录下读取配置文件,指定工作目录是为了让 当前目录、上级目录 等标识符起作用,这样就不用在命令行参数传递长长的配置文件名 
- 
-单独传参数表是因为有些命令行程序可能不止接收一个参数,直接放在Start-Process 可执行文件后面可能会无法工作 
- 
-===== 文件管理 ===== 
- 
-==== 搜索文件 ==== 
- 
-<code> 
-Get-ChildItem *.txt | select-string "Keywords" | Select Path,Line 
-</code> 
- 
-===== Windows 防火墙管理 ===== 
- 
-==== 新建规则 ==== 
- 
-<code> 
-New-NetFirewallRule -Name sshd -DisplayName "OpenSSH Server" -Description "SSH 服务" -Profile "Domain,Public,Private" -Enabled True -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow 
-</code> 
- 
-  * -Name 名称 
-  * -DisplayName 显示名称(控制面板-防火墙显示名称) 
-  * -Description 描述 
-  * -Profile 指规则生效的范围,Public-公共,Private-专用, Domain-域环境中的其他服务器 
-  * -Enabled 是否启用 
-  * -Direction Inbound/Outbound 
-  * -Protocol Tcp/udp 
-  * -LocalPort 22 22号端口 
-  * -Action Allow/Deny 允许或拒绝 
- 
-==== 允许应用程序经过防火墙 ==== 
- 
-<code> 
-# 提供3个必选参数即可 
-New-NetFirewallRule -DisplayName Notebook -Program '%windir%\notepad.exe' -Action allow 
-Get-NetFirewallApplicationFilter | where-object -property Program -match Notepad 
-Remove-NetFirewallRule -DisplayName Notebook 
-</code> 
- 
-==== 查询规则 ==== 
- 
- 
-注:查询规则时不会显示具体的规则内容,要用下面的 Get-XXXFilter 系列命令才可以) 
- 
-<code> 
-Get-NetFirewallRule 
-Get-NetFirewallAddressFilter 
-Get-NetFirewallPortFilter 
-Get-NetFirewallApplicationFilter 
- 
-</code> 
- 
-===== 磁盘:虚拟磁盘管理 ===== 
- 
-DISKPART 
- 
-<code> 
-diskpart 
-create vdisk file="D:\virtual-disk0.vhdx" maximum=10240 type=expandable #创建VHD/X虚拟磁盘 
-select vdisk file="D:\virtual-disk0.vhdx" #选择虚拟磁盘 
-attach vdisk #挂载虚拟磁盘 
-list vdisk #确定正在操作的硬盘为虚拟硬盘,选中的硬盘标注了*号 
-create partition primary #创建主分区 
-format fs=ntfs label="new-disk" quick #快速格式化 
-assign letter=m #分配驱动器号 
- 
-</code> 
- 
-<code> 
-# Powershell 命令 
-mount-diskimage -imagePath d:\virtual-disk0.vhdx #挂载磁盘,PowerShell 命令,需要管理员权限 
-</code> 
- 
-====== 内置库和三方库(.NET) ====== 
- 
-===== .NET事件:文件变化监控 ===== 
- 
-<code> 
-# 以下代码监控D:\test-file.txt 文件的变化 
-$path  = "d:\" # 监控目录,必须是文件夹 
-$w=new-object io.filesystemwatcher 
-$w.path=$path 
-$w.filter="*.txt" #监控的目标文件 
-register-objectevent $w Changed -action { 
-    write-host $event.sourceeventargs.fullpath 
-    write-host $event.sourceeventargs | get-member 
-} #注册监控事件,该命令返回一个Job对象,用get-job命令可以查看 
-</code> 
- 
-===== 文件变化轮询:有变化就输出变化 ===== 
- 
-<code> 
-$folder = 'D:\' 
-# 定义每次监控的间隔时间,这时定义为1000毫秒,即1秒 
-$timeout = 1000 
-# 创建文件系统监视对象 
-$FileSystemWatcher = New-Object System.IO.FileSystemWatcher $folder 
-Write-Host ”按 CTRL+C 来退出对文件夹 $folder 的监控” 
-while ($true) { 
-  # 监控文件夹内的所有变化 
-  $result = $FileSystemWatcher.WaitForChanged('all', $timeout) 
-  if ($result.TimedOut -eq $false) 
-   { 
-   # 当文件夹的内容变化时,发出警告提示 
-   Write-Warning ('File {0} : {1}' -f $result.ChangeType, $result.name) #字符串格式化 
-   } 
-} 
-Write-Host '监控被取消.' 
-</code> 
- 
-===== 文件监控样例: FILEWATCHER.PS1 ===== 
- 
-<code> 
-### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO 
-    $watcher = New-Object System.IO.FileSystemWatcher 
-    $watcher.Path = "D:\source" 
-    $watcher.Filter = "*.*" 
-    $watcher.IncludeSubdirectories = $true 
-    $watcher.EnableRaisingEvents = $true   
- 
-### DEFINE ACTIONS AFTER AN EVENT IS DETECTED 
-    $action = { $path = $Event.SourceEventArgs.FullPath 
-                $changeType = $Event.SourceEventArgs.ChangeType 
-                $logline = "$(Get-Date), $changeType, $path" 
-                Add-content "D:\log.txt" -value $logline 
-              }     
-### DECIDE WHICH EVENTS SHOULD BE WATCHED  
-    Register-ObjectEvent $watcher "Created" -Action $action 
-    Register-ObjectEvent $watcher "Changed" -Action $action 
-    Register-ObjectEvent $watcher "Deleted" -Action $action 
-    Register-ObjectEvent $watcher "Renamed" -Action $action 
-    while ($true) {sleep 5} 
- 
-</code> 
- 
-===== 正则表达式 ===== 
- 
-<code> 
-$rawtext = "[email protected] sent an e-mail that was forwarded to [email protected]." 
-$rawtext -match "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"  #用于匹配    
-$regex = [regex]"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b" 
-$regex.Matches($rawtext) #用于捕获 
- 
-$domaintest = "www.baidu.com; famicom.org; https://ovwx.org; NIPO.top" 
-$domainreg = [regex]"((http://)|(https://))?([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}/?" 
-$domainreg.matches($domaintest).value 
-</code> 
- 
-==== 常见正则 ==== 
-  
-  * 匹配邮箱:`$email = [regex]"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"` 
-  * 匹配域名:`$domain = [regex]"((http://)|(https://))?([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}/?"` 
- 
- 
-====== 语法 ====== 
- 
-===== 参数和字典 ===== 
- 
-<code> 
-$array1 = 'a','b','c',1 
-$array[4] = 'HHH' 
-$dict = @{ 
-  key1 = 'value1' 
-  key2 = 'value2' 
-  key3 = 'value3' 
-} 
-$dict.key4 = 'value4' 
- 
-Write-Output $dict['key1'] 
-Write-Output $dict.key1 
-Write-Output $array1[0] 
- 
-</code> 
- 
- 
-====== 杂项 ====== 
- 
-Powershell 内容显示不全(有省略号)的处理方法  
- 
-<code> 
-# 修改变量  
-$FormatEnumerationLimit = -1  
-# 使用WRAP选项输出结果 
-Get-Process -Name dllhost | Select -Property Modules | Format-Table -Wrap 
-</code> 
- 
-===== 绕过权限限制执行PS1脚本 ===== 
- 
-主要是注册表写启动项 
-<code> 
-Powershell -file xxx.ps1 -ExecutionPolicy ByPass #此方法失效 
-Powershell -C "set-executionpolicy bypass -scope process; . C:\Portable\run-server.ps1" #此方法有效 
-</code> 
- 
-===== 系统自带屏幕记录器 ===== 
- 
- 
-可用作录制操作手册 #cmd 
- 
-<code> 
-psr.exe 
-/start /output d:\step.zip 开始录制,并保存到d:\step.zip文件内 
-/stop 停止录制 
-/gui 0 显示软件界面,如果需要显示软件界面,就使用 /gui 1 或者省略该参数 
-/maxsc 10 最大截图数量 
-</code> 
- 
  
登录