aaahd 发表于 2018-9-2 07:30:08

Powershell的一些东东

  首先关于运行:
  在shell里面运行一个脚本的话,你需要set-executinopolicy设为RemoteSigned。运行一个脚本在shell里面打脚本名即可。
  如果是在run里面,就要打powershell-file"路径和脚本文件名",如果你要看到输出信息,那么可以加上-noexit选项。
  如果是在schedule里面计划运行,那么和run差不多,在startaprogram之后,打入你在run里面会用的命令行,即可。
  基本语法:
  保留字:breakcontinuedoelseelseiffilterforforeachfunctionifinlocalprivatereturnswitchuntilwherewhile
  数组:定义方法$name="string1","string2","string3"或者$number=@(1,2,3,4,5)
  引用时$name下标从0开始。$name.Count是数组大小
  数组可以相加$num1+$num2就是简单的两个数组拼接。
  数组的长度:$num.length
  也可以定义键-值对的数组,叫做associativearray。
  读取输入
  $var=Read-Host"question?"var是变量名,引号里是提示问题。
  暂停程序
  Start-Sleep-secondsn要等待的秒数
  条件判断
  -eq-ne-lt-gt-le-gt
  -not!-and-or这是逻辑比较用到的操作符
  if(condition){}
  elseif(condition){}
  ...
  else{}
  以及switch
  switch(expression)
  {
  {test}{codeblock}
  value{codeblock}
  default{codeblock}
  }value是指和expression比较的值
  while循环
  while(表达式){
  ...
  }
  或者
  do{
  }while(表达式)
  表达式可以是$var-eq"";$var-ne"";(表达式1)-and(表达式2)-and(表达式3)
  for循环
  for(初始化;表达式;STEP){}以及
  foreach($name1inCollection1){$name1相关代码....}
  返回的集合的处理
  get-childitem|Select-Objectpropname1,propname2,propname3
  其他有sort-Object;Where-Object;
  如get-childitem|sort-object|Where-Object{$_.Length-gt200}这里$_代表集合里当前成员。
  定义函数
  functionfuncname{...}
  funcitonfuncname($x,$y,$z){...}
  导入导出CSV文件
  export-csvPAth\filname.csv
  $csvfil=import-csvPath\filname.csv
  ***系统管理的一些例子:
  获取USB设备:
  gwmiWin32_USBControllerDevice-computernameSERVER1|flAntecedent,Dependent
  要知道有多少USB设备?
  $USBdev=gwmiWin32_USBControllerDevice
  write$USBdev.length
  中止一个进程:stop-process-idnnnn
  输出显示的慢一点:
  定义一个函数
  functionEasyView{process{$_;Start-Sleep-seconds.5}}
  然后,对于输出很多行的命令,
  Get-ChildItemN:Data|EasyView
  把电脑加入域:
  # Acquire credentials for a domain account that has permission to join
  $admin = Get-Credential
  # these two variables are for convenience in shortening the command line
  $user = $admin.UserName
  $pw = $admin.GetNetworkCredential().Password
  $CS = Get-WmiObject Win32_ComputerSystem
  $CS.JoinDomainOrWorkgroup("DOMAIN",$pw,$user,$null,3)
  ***用于Exchange的命令
  获得邮箱的统计报告,并排序
  Get-MailboxStatistics–ServerVAN-EX1|Sort-ObjectTotalItemSize–Descending|
  FTDisplayName,TotalItemSize,ItemCount
  如果只要显示开头5个
  Get-MailboxStatistics–ServerVAN-EX1|Sort-ObjectItemCount–Descending|Select-
  Object–First5|FTDisplayName,ItemCount
  如果要生成一个证书请求并保存为文件
  $Data1=New-ExchangeCertificate-GenerateRequest-FriendlyName"Internetcertificate
  forVAN-EX2"-SubjectName"DC=com,DC=Adatum,CN=VAN-EX2.adatum.com"-DomainNamemail
  .adatum.com
  Set-Content-Path"C:\Certificates\VAN-EX2-request.req"-Value$Data1
  注意:Set-Content是吧某个文件的内容替换,Add-Content是添加在后面。
  管理活动目录里的对象
  首先你要import-module ActiveDirectory
  创建一个用户, New-ADuser-samAccountName 参数是登录用名
  -GivenName-Surname -AcountPassword 这些都是必要的参数
  在创建用户的时候要看看同登录名的用户是不是已经存在:
  $exuser = get-ADuser -Filter {SamAccountName -eq $SAM}
  if ($exuser -eq $Null)
  { $create = New-ADuser -Name $Detailname -Givenname $firstname -Surname $lastname -SamaccountName $SAM -UserPrincipalName $UPN -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -Enabled $true -Path $OU -Company $company -Department $dept
  }
  else {
  echo "The user with samaccount "$SAM " already exist, please create it maually."
  Break
  }
  echo "account created OK."
  发送邮件
  $outlook = new-object -ComObject Outlook.Application
  $mail = $outlook.CreateItem(0)
  # 这里0代表olMailItem类型,
  $subject = "New User Information "
  $mail.Recipients.Add("name@contoso.com")
  $mail.subject = $subject

  $mail.body = ("Hello All," + "`r`n" + "`r`n" + "New User Information" + "`r`n" + "First Name :" + "" + $UserFirstname + "`r`n" + "Last Name :" + "" + $lastname +"`r`n" + "Contoso>  $mail.Send()
  这个脚本运行时,outlook会反复弹出确认授权执行的提示,按照微软网站设了组策略,仍然是这样,不知道有谁知道怎么才能去掉弹出对话框。
  系统启动时执行power shell的脚本。
  这个可以设置注册表。
  $powershell = (Join-Path $env:windir "system32\WindowsPowerShell\v1.0\powershell.exe")
  $RunKey ="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  $itemName = "MyAutorun"
  set-ItemProperty -path $RunKey -name $itemName -value ($powershell脚本路径名和参数)
  如果不要自动运行了,
  remove-ItemProperty -path $RunKey -name $itemName 即可

页: [1]
查看完整版本: Powershell的一些东东