首页 > 系统相关 >PowerShell

PowerShell

时间:2022-10-08 18:03:09浏览次数:60  
标签:count Get eq Object System type PowerShell

PowerShell

在管理员权限下调整执行策略

远程执行ps脚本

两个要求:

  1. 远程主机身份经过验证,为可信任主机

    为满足第一个要求,远端主机必须经过域服务器验证。最佳应对方法时将对方主机名称或IP加入本机信任列表,可以跳过Kerberos身份验证。

  2. 提供账号、密码远程登录

远程连接方法:

语法与命令

Cmdlet

是PowerShell提供的命令,大多数以 “动词-名词”的规律命名。

定义变量与使用数组

使用“$”作为起始标识符,与python类似都是弱类型。
没有提供数组的定义方法,当普通变量接收到一组数据时自动拓展为一维固定数组。

管道

# 关闭防火墙
$tempService=Get-Service
foreach($StopService in $tempService)
{
  if ($StopService.name -eq "MpsSvc")
  { Stop-Service $StopService.name }
}

# 使用管道
Get-Service | Where-Object -FilterScript {$_.name -eq "MpsSvc"} | Stop-Service

算术、逻辑、比较运算

算术:+ - * / %

数学库:正切:[System.Math]::Tan(8)

逻辑运算:-and -or -not -xor

比较运算:-eq,c开头的严格区分大小,其余两个不区分大小

流程控制

循环

1. 
$count=0
while($count -lt 3)
{
  $count++
  write-host '第'$count'次循环'
}

2.
$Num=5
$count=0
do {
  $count++
  $Num++
  write-host 'No.'$count
} while($Num -lt 3)

3.
$tempProcess=Get-Process
foreach ($StopProcess in $tempProcess)
{
  if ($StopProcess.Responding -eq $false) {
    Stop-Process $StopProcess
  }
  # Write-Host $StopProcess.Responding
}

4.
for ($i=1; $i -le 10; $i++) {
  Write-Host $i
}

可使用 break 跳出循环

分支

1.
$a=1
if ($a -ge 2) {
  Write-Host "equal or grater than 2"
} else {
  echo "less than 2"
}

2.
$day=[System.DateTime]::Now
switch ($day) {
  Monday {
    "one"
    break
  }
  Truesday {
    "two"
    break
  }
  default {
    "other"
  }
}

常用Cmdlet

在cmd中使用 help 与 ?
在 PowerShell 中提供了 Get-help Get-command 两个查询 Cmdlet

Get-Command 用于提供基本语法信息,信息来自Cmdlet、函数脚本、自带的说明内容,用法:

Get-Command [通配符]关键字[通配符]

Get-help [待查询的cmdlet] [-example] [-detailed] [-full]

位置导航

大多数Cmdlet可使用-path指定执行位置或路径,交互模式下可使用 Set-Location 指定路径。

Set-Location [-LiteralPath 此参数忽略] <string> [-PassThru 切换后显示切换位置]

访问驱动器

驱动器除了磁盘分区还包含注册表、证书存储空间、函数存储空间、变量存储位置等。

Get-PSDrive [-PSProvider string]

对象处理

常用的对象处理 Cmdlet 有6个 Get-WmiObject Remove-WmiObject New-Object Get-Member Where-Object Select-Object

Windows Management Instrumentation(Windows 管理规范)是windows中最重要的管理技术之一,通过它可以访问磁盘、事件日志、文件、文件夹等系统资源。

  1. Get-WmiObject (新版本中被 Get-CimInstance 取代)
    Get-WmiObject 可让用户轻易获得系统内 WMI 类及实例
  2. Remove-WmiObject
    关闭已运行的 WMI 实例
  3. New-Object
    创建新的系统物件,常见用法是通过赋值将变量定义为指定的系统物件
  4. Get-Membe 获得对象的属性、方法、事件
  5. Where-Object
    用于筛选对象,通常配合管道一起使用。在筛选时,使用“$_”这个特殊的变量名词,指代管道所传输的对象
    从查询到的数百计的驱动中过滤处运行态的
  6. Select-Object
    复制对象的指定属性到一个新对象

脚本示例

查看代码
 # 远程修改注册表
# 添加一个自启动程序
function Set-RegistryValue($key, $name, $value, $type)
{
    if ((Test-Path $key) -eq $false) {
        md $key | Out-Null
    }
    Set-ItemProperty $key $name $value -type $type
}

Set-RegistryValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "myValue" "c:\windows\xxx.exe" "String"
Set-RegistryValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" "DisableRegistryTools" "1" "dword"

# 新添加的值是隐藏状态,使用regedit无法查看。可通过 Get-ItemProperty -path xxxx 查看
查看代码
 # 导出证书
# 设置密码,导出证书时需要
$Password="opendoor"
# 导出证书种类,Pfx为带私钥证书,若只要公钥可选Cert
$type="Pfx"
# 规范证书类型
$type=[System.Security.Cryptography.X509Certificates.X509Certificate]::$type
# 导出路径
$Path="C:\Users\color"
# 访问证书存储位置,查找带私钥的个人证书
$certs=dir Cert:\CurrentUser\My | Where-Object {$_.HasPrivateKey}

foreach ($cert in $certs) {
    [void]($cert.Subject -match 'CN=([^,]+)')
    # 获取使用者名词,并取出不能作为文件名的部分
    $CN=$matches[1] -replace '[\\/:\*?`"<>|]',''
    [System.IO.File]::WriteAllBytes($(Join-Path $Path ($CN + "_" + $cert.Thumbprint + ".pfx")), $cert.Export($type,$Password))
}
查看代码
 $maxDays=4
$currentDate = [System.DateTime]::Now
$lastLogonTimeStampLimit = $currentDate.AddDays(-$maxDays)
$strComputer = [System.Net.Dns]::GetHostName()
$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$Users = $computer.psbase.children|where{$_.psbase.schemaclassname -eq "User"}
foreach ($member in $Users.psbase.syncroot) {
    Trap {Continue} # Powershell 对ADSI支持不好,使用Trap忽略提示
    if ($member.lastlogin -lt $lastLogonTimeStampLimit) {
        $temName=$member.Name
        Write-Host "$temName <==="
    }
}

 

标签:count,Get,eq,Object,System,type,PowerShell
From: https://www.cnblogs.com/zhh567/p/16767232.html

相关文章

  • 通过cmd和Powershell管理Windows服务
    cmd添加服务:sccreate"YourServiceName"binpath="<yourproject>.exe"启动服务:scstart"YourServiceName"停止服务:scstop"YourServiceName"删除服务:scdelete"You......
  • 通过Powershell 采集电脑上安装的软件
    点击查看代码![](https://img2022.cnblogs.com/blog/1326813/202210/1326813-20221002225935257-1660369632.png)#1获取当前日期$collect_date=Get-Date-Format"yyy......
  • aardio + PowerShell 可视化快速开发独立 EXE 桌面程序
    aardio可以方便地调用PowerShell,PowerShell中也可以自由调用aardio对象与函数。不用带上体积很大的System.Management.Automation.dll,直接调用系统组件,可以生成体积......
  • powershell 检查电脑指定软件安装情况
    `#1获取当前日期$collect_date=Get-Date-Format"yyyy-MM-ddHH_mm"2获取计算机主机名$ComputerName=hostname3定义需要查询的软件名称$AppDisplayName="Anyshar......
  • Powershell ExecutionPolicy 执行策略
    简单说明:powershell对于脚本的执行有着严格的安全限制Get-ExecutionPolicy-List#查看当前的执行策略Set-ExecutionPolicy-ScopeCurrentUserRemoteSigned#设置执行策略......
  • powershell 7 初体验
    支持枚举定义,类定义\类继承\接口继承,不支持接口定义\泛型类定义\泛型函数定义,但是作为shell脚本已经相当让人惊喜了,基本逻辑可以直接套用C#语法格式#enum_sample/main.......
  • PowerShell 函数
    Powershell中的函数使用关键字(function)声明,后面依次跟函数名称、左右大括号。函数将执行的代码包含在这些大括号中。#创建函数FunctionGetPSversion{......
  • 记如何让Visual Studio、Powershell和Git for Windows和谐共处
    目录前言环境解决方案步骤原理前言VisualStudio在2019版本中正式加入了对Git的支持。但如果未进行过相关的环境配置,在VS中使用内置Git将无法与SSH仓库同步。尤其是习惯......
  • PowerShell 哈希表 @{}
    PowerShell哈希表是一种数据结构,用于存储键值对(也称为字典或者关联数组)语法:$Var=@{<key1>=<value1>;<key2>=<value2>;.....;<keyN>=<valueN>;}examp......
  • Windows11中windowsPowerShell运行hexo命令报错
    修改设置Windows11安装后,系统自带的终端输入命令,git和node都可以使用,hexo不可以,提示:hexo:无法加载文件C:\Users\username\AppData\Roaming\npm\hexo.ps1`,因为在此系......