首页 > 系统相关 >PowerShell 脚本(Scripts)

PowerShell 脚本(Scripts)

时间:2023-01-27 13:32:23浏览次数:55  
标签:脚本 Set 证书 Cert MyScript Scripts ps1 PowerShell


对于经常用或者重要的脚本,可以保持到本地文件中,需要的时候可直接调用,这样处理更加方便!

 

编写脚本输出到文件 (若不指定绝对路径,默认都使用当前目录)

"Get-Date" > MyScript.ps1
"pwd" >> MyScript.ps1
"'测试'" >> MyScript.ps1


"Get-Date
pwd
'测试'" > MyScript.ps1


#或者使用 @''@ 批量写入
@'
Get-Date
pwd
"测试"
'@ > MyScript.ps1

相关操作:

#执行文本脚本
.\MyScript.ps1


#获取脚本到PS控制台
Get-Content .\MyScript.ps1


#打开文本文件
notepad MyScript.ps1

PowerShell 脚本(Scripts)_System

 

#新建或更新脚本,脚本中使用参数
notepad MyScript.ps1

Write-Host "Hello,$args"

.\MyScript.ps1 kk

PowerShell 脚本(Scripts)_ico_02

 

 

 

脚本中的参数用法与函数内部定义一样

#函数
Function Test{
begin{ $i=1 }
process{
$_.name
$i++
}
end{}
}

Get-Service -DisplayName "*MSSQLSERVER*" | Test



#脚本 notepad MyScript.ps1
begin{ $i=1 }
process{
$_.name
$i++
}
end{}

PowerShell 脚本(Scripts)_System_03

 

 

 

管道中执行的脚本:

#编辑脚本如下 notepad MyScript.ps1

foreach ($element in $input)
{
if($element.Extension -eq ".exe")
{
Write-Host -fore "red" $element.Name
}
else
{
Write-Host -fore "Green" $element.Name
}
}



#或者使用流处理,编辑脚本如下 notepad MyScript.ps1
begin{}
process
{
if($_.Extension -eq ".exe")
{
Write-Host -fore "red" $_.Name
}
else
{
Write-Host -fore "Green" $_.Name
}
}
end{}
#执行
ls $env:windir | .\MyScript.ps1

PowerShell 脚本(Scripts)_System_04

 

 

设置别名更方便:

 

 

 

#设置别名更方便
Set-Alias edit notepad.exe

edit MyScript.ps1

 

脚本中传递变量:

param (
[Parameter(ValueFromPipeline = $true, HelpMessage = "Enter your name: ")]
[String]$Name = "kk" #default value
)

Write-Host "Your name is $Name."
Write-Host ("Your name is {0} and {1}." -f $Name,"mm")

 

 

执行:

PowerShell 脚本(Scripts)_System_05

 

【数字签名证书】

脚本很容易被替换或者更高,使用签名验证会告诉我们脚本是否信任,是否包含了恶意篡改。

 

创建证书:
开始——>所有程序——>Microsoft Visual Studio 2012——>Visual Studio Tools——>VS2012 x86 本机工具命令提示
或者:
C:\Program Files\Windows Kits\8.1\bin\x86\makecat.exe

makecert.exe -pe -r -n "CN=PowerShellTestCert" -eku 1.3.6.1.5.5.7.3.3 -ss "My"

PowerShell 脚本(Scripts)_ico_06

 

查看证书:

dir Cert:\CurrentUser\My -CodeSigningCert
ls cert:CurrentUser\My
ls cert:CurrentUser\My | where {$_.subject -eq "CN=PowerShellTestCert"}

PowerShell 脚本(Scripts)_ico_07

 

 

 

设置数字签名认证:

$Cert=ls cert:CurrentUser\My | where {$_.subject -eq "CN=PowerShellTestCert"}
Set-AuthenticodeSignature -PSPath "MyScript.ps1" -Certificate $Cert

edit MyScript.ps1

PowerShell 脚本(Scripts)_数字签名_08


PowerShell 脚本(Scripts)_System_09

 

 

签名已经成功!!

 

证书相关信息:

#证书的代表
$Cert.subject

#证书的签发者
$Cert.issuer

#证书的序列号,指纹
$Cert | select SerialNumber,Thumbprint | fl *

#证书是否受信任
$Cert.Verify()

#打开证书窗口界面
[System.Reflection.Assembly]::LoadWithPartialName("System.Security")
[System.Security.Cryptography.x509Certificates.X509Certificate2UI]::DisplayCertificate($Cert)

PowerShell 脚本(Scripts)_数字签名_10

 

 

 

上面打开的证书并不受信任!

PowerShell 脚本(Scripts)_数字签名_11

 

添加信任(或者窗口添加:certmgr.msc)

$rootStore= New-Object system.security.cryptography.X509Certificates.x509Store("root","Currentuser")
$rootStore.Open("ReadWrite")
$rootStore.Add($Cert)
$rootStore.Close()
$Cert.Verify()

操作 Add($Cert) 会提示对话框,点击确认即可!

 

PowerShell 脚本(Scripts)_数字签名_12

 

给脚本添加数字签名:

#给文件(MyScript.ps1)添加签名
Set-AuthenticodeSignature MyScript.ps1 $Cert
Set-AuthenticodeSignature -PSPath "MyScript.ps1" -Certificate $Cert

#给所有文件添加签名
Set-AuthenticodeSignature (ls *.ps1) $Cert
Set-AuthenticodeSignature (Dir -recurse -include *.ps1) $Cert

#文件是否有数字签名
Get-AuthenticodeSignature test.ps1
Get-AuthenticodeSignature MyScript.ps1

对于脚本的执行权限,powershell 有几个设置:

#设置脚本执行权限
Set-ExecutionPolicy Restricted #禁止执行脚本
Set-ExecutionPolicy Default #默认
Set-ExecutionPolicy AllSigned #只执行数字验证的脚本
Set-ExecutionPolicy RemoteSigned #本地无需证书,远程需要证书
Set-ExecutionPolicy Unrestricted #无限制,可执行任何脚本

查看当前PS中脚本执行权限:

 

#查看当前PS中脚本执行权限
Get-ExecutionPolicy
Get-ExecutionPolicy -List

现在设置为只有数字签名的文件可执行:

#现在设置为数字签名可执行
Set-ExecutionPolicy AllSigned

执行脚本(第一个无签名,报错;第二个有签名,正常执行)

 

#执行脚本(第一个无签名,报错;第二个有签名,正常执行)
ls $env:windir | .\test.ps1
Get-Service -DisplayName "*MSSQLSERVER*" | .\MyScript.ps1

PowerShell 脚本(Scripts)_ico_13

 

 

 

现在我把文件内容篡改:

PowerShell 脚本(Scripts)_数字签名_14

 

执行脚本,出错!

PowerShell 脚本(Scripts)_System_15

完美!~

 

 

标签:脚本,Set,证书,Cert,MyScript,Scripts,ps1,PowerShell
From: https://blog.51cto.com/hzc2012/6024083

相关文章

  • 通过脚本实现Java程序在window系统中的快速启动和快速停止
    本文的目的是通过脚本实现Java程序在window系统中的快速启动和快速停止启动java程序前台方式启动java-jarxxx.jar登录后复制通过这种方式启动的缺点是需要保持cmd窗......
  • 通过修改脚本来提权的方法
    以普通用户登入后,先sudo-l 看看有什么具有root权限、且普通用户可以写入的脚本例:A.sh 该类脚本普通用户是启动不了的,但可以通过链式脚本启动例:存在脚本B.sh,其内......
  • 一个shell脚本文件名的坑
    shell脚本文件名中不要包含要grep的进程名,比如下面grep了redis,那么文件名中不要包含redis,否则会出问题,因为打开文件的句柄中也包含redisredis.sh#!/bin/bashpid_count=......
  • PowerShell 中运行 maven 参数无法识别
    下面的命令在命令行中执行没有问题:mvncleaninstall-Dgpg.skip但,如果你默认启动是PowerShell的话,上面的命令将会提示错误为:实际的原因是提供的参数没有被PowerShe......
  • Day02 - JavaScripts
    1.javascript介绍JavaScript的定义JavaScript是运行在浏览器端的脚步语言,是由浏览器解释执行的,简称js,它能够让网页和用户有交互功能,增加良好的用户体验效果。......
  • 逆向技巧——从混淆说明IDA Python脚本的使用
    之前工作的时候,遇到过病毒需要使用IDApython进行反混淆的问题,但是由于病毒的工作量较大、前置步骤多,没有很好的总结。闲下来了,有空了,根据网上的Demo做个实验记录一下。......
  • 速卖通脚本电脑端安装教程
    速卖通脚本电脑端安装教程一,关闭电脑防火墙及杀毒软件,最好卸载掉杀毒软件二,下载电脑端,速卖通电脑端下载地址:http://client.flysmt.com1,进入安装目录,安装USB连接插件。默认......
  • 无法加载文件 C:\Users\Administrator\Desktop\spider01\venv\Scripts\activat
    遇到问题原因Restricted(防止运行没有数字签名的脚本),要设置成remotesigned模式解决方案输入get-executionpolicy以管理员的方式打开Powershall运行,并在命令窗......
  • bat脚本获取 exe返回值 ErrorLevel 的参数和设定
    ErrorLevel的参数和设定1、实例一bat脚本中常用%errorlevel%表达上一条命令的返回值,用于判断。比如:cmd1if%errorlevel%==1(cmd2)//如果cmd1返回的错误码值等于1时,将......
  • 性能测试-第03天-掌握Jmeter断言和关联使用、自动录制脚本
    文章目录​​系列文章目录​​​​......