PowerShell相关

这里整理记录一些日常PowerShell使用情况

电脑硬件信息

仅在运行终端输出信息

在运行终端输出信息并且可以选择性保存到txt文档

执行策略

官网:关于执行策略 - PowerShell | Microsoft Learn

获取执行策略

官网:Get-ExecutionPolicy (Microsoft.PowerShell.Security) - PowerShell | Microsoft Learn

#	获取当前会话的执行策略
Get-ExecutionPolicy
            

设置执行策略

官网:Set-ExecutionPolicy (Microsoft.PowerShell.Security) - PowerShell | Microsoft Learn

#	设置 PowerShell 执行策略:脚本可以运行
Set-ExecutionPolicy RemoteSigned
            

双击执行ps1

修改*.ps1文件的默认执行程序

  1. 右键*.ps1文件,鼠标移动到“打开方式”
  2. 在“打开方式”的二级菜单点击“选择其他应用”
  3. 在“你要如何打开这个文件?”窗口中点击“更多应用”
  4. 滚动条拖到最后点击“在这台电脑上查找其他应用”
  5. 选择:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  6. 勾选“始终使用此应用打开ps1文件”

IIS站点

这个是个什么需求呢!我们在IIS上部署了好多ASP.NET 的站点,还有好多静态站点。其中后端站点会在响应的目录下记录日志(按照日期和日志类型的txt文件),随着时间的正常这些日志文件越来越多,磁盘占用量越来越大……于是就想着弄一个简单的方式删除这些文件,想到两种方式:一是列出所有的后端站点路径删除;二是遍历IIS的所有站点,找出后端站点之后删除。这里只是记录一下第二种方式:


#region 强制管理员权限执行

# 方法一:此方法代码多一点,这里只记录连接
# 参考:https://www.pstips.net/force-script-run-as-admin.html 

# 方法二
# 参考:https://stackoverflow.com/questions/7690994/running-a-command-as-administrator-using-powershell

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) 
{
 Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit 
}

#endregion

#region 需要执行的代码

#PowerShell官方文档: https://docs.microsoft.com/zh-cn/powershell/scripting/how-to-use-docs?view=powershell-6
#IIS站点相关参考:https://docs.microsoft.com/zh-cn/powershell/module/iisadministration/get-iissite?view=win10-ps

$allIISSites = Get-IISSite
Write-Host 'Get-IISSite返回的数据类型是:' $allIISSites.gettype()
if($allIISSites -and ($allIISSites.count -gt 0))
{
	Write-Host 共有 $allIISSites.count 个站点
	Write-Host '每一项的数据类型是:' $allIISSites[0].gettype()
	$allIISSites[0] | Out-String
	# 可以使用 get-member 命令来查看对象中的属性
	# get-member -inputobject $allIISSites[0]
	
	# 遍历所有的站点
	foreach($site in $allIISSites)
	{ 
		# 这里有一个问题,如何判断是服务器端站点,否则删多了怎么办???
		# 参考网址:https://stackoverflow.com/questions/4334686/find-physical-path-from-microsoft-web-administration-and-path-relative-to-its-r
		# 参考网址:https://forums.iis.net/t/1146686.aspx
		# 删除站点下日志文件,如下
		# Remove-Item 'D:/TestWebRoot/App_Log/*' -include *.txt
		Write-Host  $site.Applications["/"].VirtualDirectories["/"].PhysicalPath
	}
}
Write-Host  'End of execution...'

#endregion

# 执行完毕之后自动关闭了……
# https://blog.danskingdom.com/keep-powershell-console-window-open-after-script-finishes-running/
# https://stackoverflow.com/questions/16739322/how-to-keep-the-shell-window-open-after-running-a-powershell-script

Read-Host -Prompt "Press any key to exit"
            

强制删除文件夹

Beyond Compare这款比较工具很好用,但是试用期过去之后需要( $ _ $ )了,这里找到了一种方式可以解决这个问题,但是操作频率比较高……

#	删除用户数据
Remove-Item 'C:\Users\hj6\AppData\Roaming\Scooter Software\Beyond Compare 4' -Force -Recurse

#	执行结束
Write-Host  'Successfully deleted ...'
#	按任意键退出
Read-Host -Prompt 'Press any key to exit'