PowerShell_相關指令
irm 安裝軟體
- irm christitus.com/win | iex。 #安装如Cloudflare等DNS解析软件
一鍵歸檔
- pwsh.exe -nol -c ni archive -Type Directory -Force; mv 2021* -Destination .\archive\,-nol
Winget Powershll安裝
项目介绍
在Windows系统中,winget是一个强大的命令行包管理工具,能够帮助用户快速安装、更新和管理软件。然而,微软官方并没有提供一个直接的命令行安装方式。为了解决这个问题,winget-install项目应运而生。这个开源项目通过PowerShell脚本,为用户提供了一键安装winget的便捷方式。
项目技术分析
winget-install项目基于PowerShell脚本开发,充分利用了PowerShell的强大功能。脚本通过自动检测系统架构和操作系统版本,确保安装过程的兼容性和稳定性。此外,项目还支持多种安装方式,包括通过PowerShell Gallery、一键命令行以及本地下载运行,极大地提升了用户的使用体验。
项目及技术应用场景
winget-install适用于以下场景:
系统管理员:在多台机器上快速部署winget,简化软件管理流程。
开发者:在开发环境中快速安装所需的开发工具和依赖。
普通用户:简化软件安装过程,提升操作效率。
项目特点
一键安装:通过简单的PowerShell命令,即可完成winget的安装。
自动检测:脚本自动检测系统架构和操作系统版本,确保安装的兼容性。
多平台支持:支持Windows 10、Windows 11、Server 2019/2022以及Windows Sandbox。
灵活安装方式:提供多种安装方式,满足不同用户的需求。
持续更新:项目持续更新,确保用户始终使用最新版本的winget。
如何使用
方法1:通过PowerShell Gallery安装
这是推荐的方法,因为它总是获取经过测试的公共发布版本,易于记忆,并且支持所有参数。
Install-Script winget-install -Force
方法2:一键命令行安装
使用以下命令,即可立即运行脚本进行安装:
irm asheroto.com/winget | iex
方法3:本地下载并运行
下载最新版本的winget-install.ps1脚本,然后在PowerShell中运行:
.\winget-install.ps1
oha
介绍oha 是一个开源的 HTTP 负载测试工具,用于测试服务器的性能
- 具体的使用场景
- 性能测试:模拟高并发请求以测试 web 服务的性能。
- 负载测试:检测系统在高负载情况下的表现。
- 容量规划:帮助确定服务器的硬件和网络需求。
- 稳定性测试:确保在长期运行下系统的稳定性。
- 压力测试:查找系统的瓶颈,从而优化性能。
安装
该程序基于稳定的 Rust 构建,make并具备cmake通过 Cargo 安装的先决条件。
cargo install
oha您可以选择针对native-tls而不是rustls构建 oha 。
cargo install --no-default-features --features rustls oha
您可以通过启用功能来启用 VSOCK 支持vsock。cargo install --features vsock oha
在 Arch Linux 上
pacman -S
oha在 macOS 上 (Homebrew)
brew install
oha 在 Windows 上
(winget) winget install hatoo.oha
在 Debian 上(Azlux 的存储库)
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ stable main" | sudo tee /etc/apt/sources.list.d/azlux.list sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg apt update apt install oha
因為這個系統上已停用指令碼執行,所以無法載入 C:\Users\Default\Documents\PS\shutdown.ps1 檔案。如需詳細資訊,請參閱 about_Execution_Policies,網址為 https:/go.microsoft.com/fwlink/?LinkID=135170。
+ CategoryInfo : SecurityError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess
解决方案:
以系統管理員權限執行 PowerShell,執行以下指令:
Set-ExecutionPolicy RemoteSigned
使作業系統接受所有自訂或信任來源的 Script,如此問題便解決啦。
ScheduledJob
- $trigger = New-JobTrigger -Once -At "11/14/2024 9:30 AM" #設定執行時間
- Register-ScheduledJob -Name "shutdown-6738" -FilePath $path -Trigger $trigger #註冊Scheduldejob
- Get-JobTrigger -Name shutdown-6738 | Set-JobTrigger -Once -At "10:00" #修改Scheduledjob執行時間
遠程登錄 Powershell
使用PowerShell Remoting,您可以在远程Windows系统上运行PowerShell命令或访问完整的PowerShell会话。 它类似于SSH,用于访问其他操作系统上的远程终端。
默认情况下,PowerShell处于锁定状态,因此您必须先启用PowerShell Remoting。 如果您使用工作组而不是域(例如,在家庭网络中),则此设置过程会更加复杂,但是我们将逐步指导您。
在要远程访问的PC上启用PowerShell远程处理 (Enable PowerShell Remoting on the PC You Want to Access Remotely)
第一步是在要建立远程连接的PC上启用PowerShell Remoting。 在该PC上,您需要使用管理权限打开PowerShell。
在Windows 10中,按Windows + X,然后从“高级用户”菜单中选择PowerShell(Admin)。
在Windows 7或8中,单击“开始”,然后键入“ powershell”。 右键单击结果,然后选择“以管理员身份运行”。
在PowerShell窗口中,键入以下cmdlet(命令的PowerShell名称),然后按Enter:
Enable-PSRemoting -Force
此命令启动WinRM服务,将其设置为与系统一起自动启动,并创建允许传入连接的防火墙规则。 cmdlet的-Force部分告诉PowerShell执行这些操作,而不提示您执行每个步骤。
如果您的PC是域的一部分,那就是您要做的所有设置。 您可以跳过以测试您的连接。 如果您的计算机是工作组的一部分(它们可能位于家庭或小型企业网络中),则您还有更多的设置工作要做。
注意:在域环境中成功设置远程处理完全取决于网络的设置。 远程处理可能会被管理员配置的组策略自动禁用,甚至启用。 您可能也没有以管理员身份运行PowerShell所需的权限。 与往常一样,在尝试这种操作之前,请先咨询管理员。 他们可能有充分的理由不允许这样做,或者他们可能愿意为您进行设置。
设置工作组 (Set Up Your Workgroup)
如果您的计算机不在域中,则需要执行一些其他步骤来进行设置。 如上一节所述,您应该已经在要连接的PC上启用了远程处理。
注意:为了使PowerShell Remoting在工作组环境中工作,您必须将网络配置为私有而不是公共网络。 有关差异的更多信息,以及如何在已建立公共网络的情况下更改为专用网络的信息,请查看我们的专用和公共网络指南。
接下来,您需要在要连接的PC和要从其连接的PC上都配置TrustedHosts设置,以便计算机之间可以相互信任。 您可以通过以下两种方式之一来执行此操作。
如果您要在家庭网络上继续前进并信任任何PC进行远程连接,则可以在PowerShell中键入以下cmdlet(同样,您需要以管理员身份运行它)。
Set-Item wsman:\localhost\client\trustedhosts *
星号是所有PC的通配符。 相反,如果您想限制可以连接的计算机,则可以用逗号分隔的IP地址列表或认可的PC的计算机名称替换星号。
运行该命令后,您需要重新启动WinRM服务,以便新设置生效。 键入以下cmdlet,然后按Enter:
Restart-Service WinRM
请记住,您需要在要连接的PC以及要从其连接的任何PC上运行这两个cmdlet。
测试连接 (Test the Connection)
现在您已经为PowerShell Remoting设置了PC,现在该测试连接了。 在要从其访问远程系统的PC上,在PowerShell中键入以下cmdlet(将“ COMPUTER”替换为远程PC的名称或IP地址),然后按Enter:
Test-WsMan COMPUTER
这个简单的命令测试WinRM服务是否在远程PC上运行。 如果成功完成,您将在窗口中看到有关远程计算机的WinRM服务的信息-表示已启用WinRM并且您的PC可以通信。 如果命令失败,则会显示一条错误消息。
执行一个远程命令 (Execute a Single Remote Command)
To run a command on the remote system, use the Invoke-Command cmdlet using the following syntax:
若要在远程系统上运行命令,请使用以下语法使用Invoke-Command cmdlet:
Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME
“计算机”代表远程PC的名称或IP地址。 “ COMMAND”是您要运行的命令。 “ USERNAME”是您要在远程计算机上运行命令的用户名。 系统将提示您输入用户名的密码。
这是一个例子。 我想查看IP地址为10.0.0.22的远程计算机上C:\目录的内容。 我想使用用户名“ wjgle”,所以我将使用以下命令:
Invoke-Command -ComputerName 10.0.0.22 -ScriptBlock { Get-ChildItem C:\ } -credential wjgle
开始远程会话 (Start a Remote Session)
如果您要在远程PC上运行多个cmdlet,而不必重复键入Invoke-Command cmdlet和远程IP地址,则可以启动远程会话。 只需键入以下cmdlet,然后按Enter:
Enter-PSSession -ComputerName COMPUTER -Credential USER
同样,将“ COMPUTER”替换为远程PC的名称或IP地址,并将“ USER”替换为要调用的用户帐户的名称。
提示符更改为指示您连接到的远程计算机,并且可以直接在远程系统上执行任意数量的PowerShell cmdlet。
軟體卸載
通过Windows PowerShell可以高效地管理和卸载系统中的软件。以下是具体介绍:
启动PowerShell:首先,需要以管理员身份打开PowerShell。可以通过在任务栏的搜索框中输入“PowerShell”,然后选择“以管理员身份运行”来实现。
获取软件列表:使用Get-AppxPackage -AllUsers | Select Name, PackageFullName命令列出所有预装软件的全名和包名,这有助于确定要卸载的具体应用。
执行卸载命令:根据获取到的软件信息,使用Remove-AppxPackage
验证卸载结果:完成卸载操作后,可以再次使用Get-AppxPackage -AllUsers | Select Name, PackageFullName命令检查应用是否已从列表中移除,从而确认卸载是否成功。
XBOX
Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode - Register “$($_.InstallLocation)AppXManifest.xml”}
網頁響應請求
Invoke-WebRequest -Uri $url
Other
- New-Item #创建新项目
- Get-Alias #獲取別名
- Get-Command #查看所有Command指令
- Get-Help #獲取指令幫助
- Get-PSDrive #获取当前会话中的驱动器。
- New-PSDrive #创建与项目数据存储中的某个位置关联的临时和持久驱动器。
- Get-ChildItem #获取一个或多个指定位置中的项和子项。
- Get-Content #获取指定位置的项的内容。
- Import-Csv #从字符分隔值(CSV)文件中的项目创建类似表格的自定义对象。
- Where-Object #根据对象的特性值从集合中选择对象。
- Select-Object #选择对象或对象属性。
- Get-Process #可以执行任务管理器的功能
- Get-Service #查看计算机的状态和服务列表
- Copy-Item #将文件和文件夹及其内容复制粘贴到其他目录
- Set-ExecutionPolicy #更改脚本执行的安全级别
- Export-CSV #此命令可以获取指定命令的输出文件并将其转换为 CSV 文件
- ConvertTo-HTML #创建 HTML 报告
- Get-ADUser #查看ADUser
- Get-Process #獲取系統進程
- Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} #解决提示:需要新应用打开此ms-gamingoverlay?
AD
- Get-ADUsers -Identity USER -Properties “*”
#dsquery是一个好命令。它可以用来查询AD中各种对象。dsquery如果没查询到任何结果,将返回一个空行,没有报错信息。用法举例如下:
#例1 根据用户名查用户帐号
C:\WINDOWS>dsquery user -name gp*
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
#这里的user就是指查用户帐号,也可以换成Computer来查计算机帐号,换成group来查组,或者换成server来查域控制器;-name参数是指根据用户名来查,*是通配符;
#这条命令的意思就是查询用户名以gp开头的所有用户帐号,并且返回其DN
#解释:DN,Distinguished Name,可辨识名称,是包含了全路径的AD对象名称。格式如下
CN=david,OU=staff,DC=domain,DC=com
#这个DN说明的是一个叫david的对象,它位于domain.com域下的一个叫staff的OU中
#例2 根据帐号描述(description)来查用户帐号
#我们公司会将用户的工号放在用户描述中,常常需要通过工号来查用户帐号。可以用命令:
C:\WINDOWS>dsquery user -desc *00527*
"CN=david,OU=staff,DC=domain,DC=com"
#这里就是查询description中含有00527的用户帐号DN,通配符*放在00527的前后各一个,说明只要中间含有00527即满足条件。
#例3 根据状态查计算机帐号(不再激活n周的计算机帐号)
C:\WINDOWS>dsquery computer -inactive 7
"CN=computer01,OU=workstations,DC=domain,DC=com"
-inactive #后面的7说明7周
#例4 根据禁用状态查用户帐号
C:\WINDOWS>dsquery user -disabled
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
"CN=david,OU=staff,DC=domain,DC=com"
-disabled #参数用来查被禁用的用户帐号
#例5 查指定域下被禁用的帐号中名字中含有gp的
C:\WINDOWS>dsquery user -disabled -name gp* -d domain.com
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
-d #后面跟指定的域名
#讲到这里大家有没有注意到,虽然dsquery是一个好命令,但是单独使用的时候返回的结果看起来很晕。因为返回的结果都是以DN形式存在的。
#要想看的更加清楚,怎么办?比如我想返回的结果包括一个简单的用户帐号名和该帐号的描述。
#dsget命令闪亮登场。
#dsget命令可
#例6 返回某个用户的用户帐号名和描述(查名字中含有gp的用户)
C:\WINDOWS>dsquery user -name gp* | dsget user -samid -desc
desc samid
Group Policy Test account gp01
Group Policy Test account no.2 gp02
dsget succeeded
#这里的samid就是Windows下的传统用户名。desc列下的就是描述
#例7 作为例6的进一步,我们加上一个参数,用来列出帐号是否被禁用
C:\WINDOWS>dsquery user -name gp* | dsget user -samid -desc -disabled
desc samid disabled
Group Policy Test account gp01 yes
Group Policy Test account no.2 gp02 yes
dsget succeeded
-disabled#列出是否禁用的状态,yes表示该帐号已经被禁用,no表示未禁用。
#例8 查某个用户组(查名字中含有cap字符串的所有Group)
C:\WINDOWS>dsquery group -name *cap* -d domain.com | dsget group -samid -secgrp -scope
samid scope secgrp
WG_CAP universal yes
DCApps global yes
dsget succeeded
-secgrp #判断是否security group,若No则为Distribution Group
-scope #显示是Domain Local组,Global组或者universal组
-samid #显示组名
#例9 查域中的域控制器中哪台是GC(Global Catagory)服务器
C:\WINDOWS>dsquery server -d domain.com | dsget server -dnsname -isgc
dnsname &n
bsp; isgc
CNDC01.domain.com yes
CNDC02.domain.com no
dsget succeeded
#例10 查FSMO角色服务器
netdom query fsmo /d:[domainname]
C:\WINDOWS>netdom query fsmo /d:domain.com
Schema owner CNDC01.domain.com
Domain role owner CNDC01.domain.com
PDC role CNDC01.domain.com
RID pool manager CNDC01.domain.com
Infrastructure owner CNDC02.domain.com
The command completed successfully.
#AD强制更新当你在配置新的安全策略后,原则上在工作站或服务器上,每90分钟更新一次安全性设置,而在域控制器则5分钟更新一次;初此之外,在没有任何更改的情况下,这些安全设置每16小时会更新一次。如果我们想要强迫更新,就需要强制更新命令 gpupdate /force (必需客户端更新命令,单服务器更新无效)
gpupdate #用法:gpupdate "/target:{computer| user}" "/force" "/wait:value" "/logoff" "/boot"
#参数说明:
/target:{computer| user : #只针对计算机设置或目前用户设置做更新,默认值是两者的设置都重新整理。
/force :#省略所有最佳化以及重新套用所有设置的进程动作。
/wait:value :#等待完成策略处理的秒数时间,默认是600秒,0代表不等待,而-1代表无限等待。
/logoff :#当安全性设置更新完成后登出系统。这是针对那些组策略客户端的扩充,它是在用户登陆时做处理,例如:用户组策略软件安装以及文件夹重新导向,而不是在背景更新周期中作处理。然而,这个选项在不需要用户登出时,是无法发挥作用的。
/boot :# 当安全性设置重新整理后,计算机会重新启动。
/?:#显示指令的使用说明档。
UserPrincipalName:#指定要由客户端进行身份验证的服务的用户主体名称 (UPN)。一个用户帐户名(有时称为“用户登录名”)和一个域名(标识用户帐户所在的域),这是登录到Windows域的标准用法。格式是: xiaowen@azureyun.com (类电子邮件地址)。
SamAccountName:#在AD属性AMAccountName中,存储帐户登录名或用户对象,实际上是命名符号“Domain\LogonName ”中使用的旧NetBIOS表单,该属性是域用户对象的必需属性;而SAMAccountName应始终与UPN主体名称保持一致,即SAMAccountName必须等于属性“UserPrincipalName” 的前缀部分。