powershell命令学习
#实例化对象,以SqlConnection为例子
#引用静态方法 Using Static Classes and Methods
$result=[System.Math]::Pow(2,3)
#列出以sql开头的进程
#列出所有进程,按照占用的workingset大小降序排列
#列出本机共享
#得到实际的cpu个数
#如何使用if else,foreach , 得到所有的服务,安装服务状态进行排序 1
foreach ($temp in $serviceArray)
{
if($temp.status -eq "stopped")
{
write-host "The" $temp.name "is stopped" -foreground red
}
elseif($temp.status -eq "running")
{
write-host "The" $temp.name "is running" -foreground green
}
else
{
write-host "The" $temp.name "status is " $temp.status -foreground yellow
}
}
#如何使用if else,foreach , 得到所有的服务,安装服务状态进行排序 2
foreach {
if($_.status -eq "stopped")
{
write-host "The" $_.name "is stopped" -foreground red
}
elseif($_.status -eq "running")
{
write-host "The" $_.name "is running" -foreground green
}
else
{
write-host "The" $_.name "status is " $_.status -foreground yellow
}
}
#如何使用switch , 得到所有的服务,安装服务状态进行排序
foreach {
switch($_.status)
{
"stopped"
{
write-host "The" $_.name "is stopped" -foreground red
}
"running"
{
write-host "The" $_.name "is running" -foreground green
}
default
{
write-host "The" $_.name "status is " $_.status -foreground yellow
}
}
}
#switch 通配符,统计出包含“sql”关键字的字符串数量
$stringArray="sqlserver","t-sql","serviceBroker","TDE" |
foreach {
switch -wildcard ($_)
{
"*sql*"
{
$counter++
}
default
{
write-host $_
}
}
}
Write-host "there are " $counter "terms contain sql"
#switch 正则表达式
foreach {
switch -regex ($_)
{
"sql.*?\d+"#包含sql,并且后面至少有一个数字
{
write-host $_ -foreground red
}
default
{
write-host $_
}
}
}
#得到状态为"运行"的服务 get-service
get-service | where-object {$_.status -eq $strState}
#得到状态为"运行"的服务 get-wmiobject
get-wmiobject win32_service -Filter "state='$strState'"
#将内容写入文件, out-file cmdlet
$strPath="c:\runningService.txt"
get-service | where-object {$_.status -eq $strState} | out-file -filepath $strPath
#查找字符串
$files=get-childitem $folder -recurse | where {$_.extension -eq $extension } |
foreach($_){
$fileFullName= $_.FullName
$content=get-content $fileFullName
switch -wildcard ($content)
{
$keywords
{
write-host $fileFullName
}
default
{
# write-host $content
}
}
}
#wmi
win32_share 设置共享信息:最大访问人数,描述信息
SetShareInfo Method of the Win32_Share Class
Function funlookup($intIN)
{
Switch($intIN)
{
0 { "Success" }
2 { "Access denied" }
8 { "Unknown failure" }
9 { "Invalid name" }
10 { "Invalid level" }
21 { "Invalid parameter" }
22 { "Duplicate share" }
23 { "Redirected path" }
24 { "Unknown device or directory" }
25 { "Net name not found" }
DEFAULT { "$intIN is an Unknown value" }
}
}
$objService=Get-WmiObject -query "select *from win32_share where name='$shareName'"
$errRTN=$objService.setShareInfo($maxAllowed,$description)
funlookup($errRTN.returnValue)
#win32_service 改变启动模式
ChangeStartMode Method of the Win32_Service Class
$objService=(get-wmiobject -query "select * from win32_service where name = '$serviceName'").changestartmode("Automatic") #Manual ,#Disabled
#wmiclass 创建共享
$shareName="shareNameTest"
$maxAccessValue=5
$description="this is description"
$type=0
$objWMI=[wmiClass]"win32_share"
$objWMI.Create($folderPath,$shareName,$type,$maxAccessValue,$description)
#配置DNS address和DNS suffiex.
Foreach($NIC in $NICs) {
$NIC.SetDNSServerSearchOrder($DNSServers)
}
$DNSSuffixSearchOrder="10.193.92.10,10.198.38.253,10.198.38.254,157.56.236.138,10.193.70.10,157.54.14.146,157.54.27.50"
$path="HKLM:\System\CurrentControlSet\Services\TCPIP\Parameters\"
set-itemproperty -path $path -name "SearchList" -value $DNSSuffixSearchOrder
#createAccount

function funhelp()
{
$helpText=@"
NAME:CreateAccount.ps1
Create a account on a local or remote machine, Please specify the account name and password.
PARAMETERS:
-accountName specifies the account name you want to create
-password speecifes the password
-computerName [optional] it's local machine by default
SYNTAX:
CreateAccount.ps1 -accountName "userTest" -password "P@s5w0rd"
Create a account named userTest on local machine ,and specify the password as P@s5w0rd
CreateAccount.ps1 -accountName "userTest" -password "P@s5w0rd" -computerName="stswormdan1"
Create a account named userTest on stswormdan1 ,and specify the password as P@s5w0rd
"@
$helpText
exit
}
if(!($accountName) -or !($password))
{
funhelp
}
if(!($computerName))
{
$computerName =(Get-WmiObject -Query "select *from Win32_ComputerSystem" | Select-Object name).name
}
$comp = [adsi] "WinNT://$computerName"
$user = $comp.Create("User", $accountName)
$user.SetPassword($password)
$user.SetInfo()
Write-Host "Account $accountName created in machine $computerName"
#createFolder

function funhelp()
{
$helpText=@"
NAME:CreateFolder.ps1
Create a folder on a local or remote machine
PARAMETERS:
-folderPath specifies the path of folder you want to create
-computerName [optional] it's local machine by default
SYNTAX:
CreateFolder.ps1 -folderPath "c:\folder1"
Create a share folder mapping the c:\folder1 on local machine
CreateFolder.ps1 -folderPath "c:\folder1" -computerName stswordman1
Create a share folder mapping the c:\folder1 on computer stswordman1
"@
$helpText
exit
}
if(!($folderPath))
{
funhelp
}
if(!($computerName))
{
$computerName="."
}
$p = [WMIClass]"\\$computerName\root\cimv2:Win32_Process"
$p.Create("cmd.exe /c md $folderPath")
Write-Host "Account $folderPath created in machine $computerName"
#zip

function funhelp()
{
$helpText=@"
NAME:Zip.ps1
compress file as zip format
PARAMETERS:
-filePath specifies the file you want to zip
-folderPath specifes the folderPath you want to zip
-allInOne only takes effect when you specifies the -folderPath parameter
Warning: the -filePath can't exist at the same time.
SYNTAX:
zip.ps1 -filePath "c:\1.txt"
compress the file c:\1.txt and name as 1.txt.zip
zip.ps1 -folderPath "c:\1"
compress all files under folder c:\1 recursively as separate zip file.
"@
Write-Host -ForegroundColor green $helpText
exit
}
function out-zip {
Param([string]$path)
if (-not $path.EndsWith('.zip')) {$path += '.zip'}
if (-not (test-path $path)) {
set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
}
$ZipFile = (new-object -com shell.application).NameSpace($path)
$input | foreach {$zipfile.CopyHere($_.fullname)}
}
if(!($filePath) -and !($folderPath))
{
funhelp
}
if($filePath)
{
Get-Item $filePath | out-zip $filePath".zip"
Write-Host "1Compress $filePath completed"
}
elseif($folderPath)
{
if($allInOne -eq "true")
{
}
else
{
Get-ChildItem $folderPath -Recurse | Select-Object name,directoryName |
foreach($_){
$fileName=$_.fullName
$folderName=$_.directoryName
Get-Item $fileName | out-zip $fileName".zip"
# write-host $folderName"."$fileName".zip"
# Write-Host "Compress $fileName completed "
}
}
}
#Add a domain user to the local Administrators group on the local or a remote computer

$computerName = Read-Host 'Enter computer name or press <Enter> for localhost'
$userName = Read-Host 'Enter user name'
if ($computerName -eq "") {$computerName = "$env:computername"}
[string]$domainName = ([ADSI]'').name
([ADSI]"WinNT://$computerName/Administrators,group").Add("WinNT://$domainName/$userName")
Write-Host "User $domainName\$userName is now local administrator on $computerName."
#read log
#performacne counter
$computername="stswordman"
$interval=15
$path="c:\pessrformance.blg";
get-Counter -computername $computername -Counter $counterList -MaxSamples 60 -SampleInterval $interval | export-counter -max 1 -path $path
#monitor Disk

{
}
function DiskMonitor($computerName)
{
#报告可用容量小于10GB或者30%的硬盘
$diskspaceArrayList=Get-WmiObject -ComputerName $computerName -query "Select * from Win32_logicaldisk where driveType=3" | select-object DeviceID,Freespace ,Size
foreach ($singleDiskDriver in $diskspaceArrayList)
{
$driverID=$singleDiskDriver.DeviceID
$FreeGB=[int]($singleDiskDriver.Freespace/(1024*1024*1024))
$TotalGB=[int]($singleDiskDriver.Size/(1024*1024*1024))
$precent=([int]($FreeGB*10000/$TotalGB))/100
SaveToTable $computerName $driveID $freeGB $totalGB
if( ($FreeGB -lt 10) -or ($precent -lt 30) )
{
write-host "The freespace in Drive $driverID of computer $computerName is low, the avaialbe space is $FreeGB GB , precent=$precent % .The total size is $TotalGB GB" -foreground Yellow
}
}
}
Write-Host "------------------- Low Disk ---------------------------"
Write-Host "This script will oupput all the disks which capacity is less than 10Gb or the precent is less than 30%"
Write-Host "------------------- Low Disk ---------------------------"
$computerList=#...
foreach($computer in $computerList)
{
DiskMonitor ($computer)
}
创建自定义类
public class PerformanceCounter
{
private string counterPath;
private double value;
private System.DateTime date;
public PerformanceCounter(string counterPath, double value,System.DateTime date)
{
this.counterPath = counterPath;
this.value = value;
this.date=date;
}
public double Value
{
get { return this.value; }
}
public string CounterPath
{
get { return this.counterPath; }
}
public string Date
{
get { return this.date.ToString(); }
}
}
"@
Add-Type -TypeDefinition $source
$basicTestObject = New-Object PerformanceCounter("1",2.2, [System.DateTime]::now);
$basicTestObject.Value;
$basicTestObject.CounterPath;
$basicTestObject.Date;
get-process iexplore | foreach {stop-process $_.id}
add domain user to local group
$objGroup = [ADSI]("WinNT://machineName/Administrators")
$objGroup.PSBase.Invoke("Add",$objUser.PSBase.Path)
remove domain user to local group
$objGroup = [ADSI]("WinNT://machineName/Administrators")
$objGroup.PSBase.Invoke("Remove",$objUser.PSBase.Path)
更改SQLSERVER/agent启动账号
$strPassword= "asdfsfsfsdf112211"
$computerName="xxxxxx"
$sqlservice = Get-WmiObject -computername $computerName –namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService –filter "ServiceName='MSSQLSERVER'"
$sqlservice.SetServiceAccount($strUserName, $strPassword)
$sqlservice.StopService()
$sqlservice.StartService()
$sqlservice = Get-WmiObject -computername $computerName –namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService –filter "ServiceName='SQLSERVERAGENT'"
$sqlservice.SetServiceAccount($strUserName, $strPassword)
$sqlservice.StartService()
http://sqlmag.com/powershell/using-sql-server-management-objects-powershell
Method 1. If you're using PowerShell 1.0, you can load a .NET assembly for that PowerShell version using the command:
(Although this command wraps here, you need to enter it all on one line in the PowerShell console.) This command will grab the latest SMO installed in your system. You can also use this method with PowerShell 2.0 and later.
Method 2. In PowerShell 2.0 and later, you can use the Add-Type cmdlet to load the Microsoft.SqlServer.Smo assembly:
Unfortunately, this command won't work if you have multiple SQL Server versions installed on your machines. In addition, you might also encounter an error message if you're running it on a single SQL Server 2012 instance. This is a known bug that has been reported to Microsoft.
Method 3. This method is a workaround if you're using PowerShell 2.0 or later but Method 2 doesn't work. In this workaround, you use the full SMO assembly path in the command:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现