Scott's Blog

学则不固, 知则不惑

0%

PowerShell 常用命令

Power shell 作为一门windows平台下的脚本语言,对于系统管理员来说,可以极大的减少我们的工作,作为一流的系统管理员(逃~),不可不学!

Why Power Shell

  • Working in windows
  • Support Object
  • .NET Support
  • Power ! ! !

Over View

Power shell 作为一门windows平台下的脚本语言,可以极大的减少我们的工作,它的好处自然不用多说,用过的都知道,下面简单的看一下语法概览。

  • 查命令的使用:Get-Help
  • 查对象的方法和属性:Get-Member
  • 查命令历史记录:Get-History
    • 命令导出为ps1 : xxx | Foreach-Object {$_.CommandLine} > C:.ps1
  • 查找命令:Get-Command
  • 上一条命令是否成功:$lastExitCode
  • 一个命令要多久: Measure-Command{ scripts}

基础命令

where-object

使用这个命令可以从列表或者输出中过滤信息,格式为where-object{ } ,where-object回遍历它之前的属性,在{}中,可以使用$_来代表当前遍历的元素,所以,在where-object中,可以进行大量的操作。

Foreach-Object

这个命令和where-object差不多,可以用来处理列表中的项,同样可以在其中使用$_命令

读取数据

Get-Content 可以读取csv或者txt文件,读取完成之后可以通过数组的形式访问.

数据导出到CSV文件

1
2
3
4
5
6
7
8
9
10
11
12
13
Powershell Output info to CSV file
$data = @()
$row = New-Object PSObject
$row | Add-Member -MemberType NoteProperty -Name "Username" -Value $username
$row | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $ComputerName
$row | Add-Member -MemberType NoteProperty -Name "Domain" -Value $domainName
$row | Add-Member -MemberType NoteProperty -Name "monitorSN" -Value $monitorSN
$row | Add-Member -MemberType NoteProperty -Name "ComputerSN" -Value $info.SerialNumber
$row | Add-Member -MemberType NoteProperty -Name "LastTimeLoginUser" -Value $loginInfo.Name
$row | Add-Member -MemberType NoteProperty -Name "LoginCounts" -Value $loginInfo.count

$data += $row
$data | Export-CSV \\10.65.64.219\soft\Information\infoList.csv -noTypeInformation -Append

PowerShell与excel文件交互

获取登录名

1
$name=Get-WmiObject -Class Win32_UserAccount -Filter "Name='$env:username' and Domain='$env:userdomain'"

控制csv的语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# CSV:
# a,b,c
# 1,2,3
# 4,5,6
# 7,8,

$csv = Import-Csv C:\test.txt
$user = "4"
foreach ($row in $csv) {
if ($row.a -eq $user) { $row.c = "updated" }
}
$csv | Export-Csv C:\test.txt

#Output:
#TYPE System.Management.Automation.PSCustomObject
#"a","b","c"
#"1","2","3"
#"4","5","updated"
#"7","8","9"

查看登陆到物理机的用户

1
Get-WmiObject -Class Win32_ComputerSystem |Select-object -ExpandProperty UserName

从bat运行powershell

1
2
3
4
5
6
7
8
@echo off

powershell set-executionpolicy unrestricted
powershell -file D:\soft\Scripts\GetUsersPhoneNumber\getUserPhone.ps1

exit

CSV-EXCEL http://www.pstips.net/converting-csv-to-excel-file.html

判断操作系统位数

1
(Get-WmiObject Win32_OperatingSystem).osarchitecture

隐藏明文密码

1
2
3
4
Write-host "text for pwd"
$plainText = Read-Host | ConvertTo-SecureString -AsPlainText -Force
$encryptedText = $plainText | convertFrom-Securesting
Write-host $encryptedText

查看域OU信息

1
Get-ADOrganizationalUnit -Filter 'Name -like "*"'

参数的定义

1
2
3
4
5
function Test-Function
{
param($ 参数名 1='默认参数值 1', $ 参数名 2='默认参数值 2')
Write-Host "参数 1=$ 参数名 1,参数 2=$ 参数名 2";
}

多线程

通用参数

1
2
3
-Verbose[:{$true | $false}]

显示有关由该命令执行的操作的详细信息。此信息类似于跟踪或事务日志中的信息。此参数仅在命令生成详细消息时才起作用。例如,此参数在命令中包含 Write-Verbose cmdlet 时起作用。

运行网上下载的ps1文件

1
2
Unblock-File -Path "C:\Users\Fan.ZhangFZ\soft\Scripts\Invoke-Parallel-master\Invoke-Parallel\Invoke-Parallel.ps1"
. "C:\Users\Fan.ZhangFZ\soft\Scripts\Invoke-Parallel-master\Invoke-Parallel\Invoke-Parallel.ps1"

远程建立ssion,处理powershell命令

关于[cmdletbinding()]

Powershell渗透参考

PowerSheel 学习资源

相关书籍

  • 《Windows PowerShell 应用手册》——Lee Holmes著