cmd

分享一些自己工作上写过 Windows 脚本,希望可以帮助到有同样需求的小伙伴

# WIFI 黑白名单

由于 Ivanti EPM 只支持禁用无线网卡的功能,无法对无线 SSID名称 做为管控对象,所以之前针对有这方面需求的用户写了个 WIFI 黑白名单的脚本

# WIFI 白名单

要想使用 WIFI 白名单,首先需要先禁止所有的 SSID,然后添加允许的 SSID,这样客户端就只能访问允许列表中的 SSID

l
@echo off
# 拒绝所有 SSID
netsh wlan add filter permission=denyall networktype=infrastructure
# 添加允许访问的 SSID, 修改命令中的 "SSID 名称" 即可
netsh wlan add filter permission=allow ssid="SSID名称" networktype=infrastructure

# WIFI 黑名单

仅拒绝访问阻止列表的 SSID

l
@echo off
# 添加禁止访问 SSID, 修改命令中的 "SSID 名称" 即可
netsh wlan add filter permission=block ssid="SSID名称" networktype=infrastructure

# 辅助命令

  • 查看允许和阻止的 SSID 列表
l
netsh wlan show filters

upload successful

  • 删除允许的 SSID
l
netsh wlan delete filter permission=allow ssid="SSID名称" networktype=infrastructure
  • 删除阻止的 SSID
l
netsh wlan delete filter permission=block ssid="SSID名称" networktype=infrastructure

# 禁用电脑摄像头

有一些企业内部管控比较严厉,希望可以通过 Ivanti EPM 禁止用户打开电脑的摄像头,该企业使用了 AD 域限制了用户的管理员权限,所以我这边就简单粗暴,直接在设备管理器中禁用掉摄像头

# 禁用摄像头

l
Disable-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *cam* -Class Camera -Status OK).InstanceID -Confirm:$false

upload successful

# 启用摄像头

l
Enable-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *cam* -Class Camera -Status Error).InstanceID -Confirm:$false

# 文件查找

有的用户希望能够通过 EPM 查询客户端是否存在某个软件和文件,由于 EPM 只能收集客户端安装过的软件和运行过的软件信息,对非可执行程序或者未在电脑上运行过的程序是无法搜集的,于是写了个查找文件的脚本,通过遍历所有的磁盘,然后将结果保存到用户指定的共享文件中

l
# 获取客户端磁盘分区信息
$DiskList = Get-Volume | where { ($_.DriveType -like 'Fixed') -and ($_.FileSystemLabel -notlike 'System Reserved')} | select -expand DriveLetter
# 定义保存信息的文件名称
$FileName = ${env:username}+"_"+${env:COMPUTERNAME}+"_"
# 保存文件的共享路径
$UNCPath = '\\127.0.0.1\auditreport$'
# 连接共享
net use $UNCPath password /user:administrator
# 遍历磁盘分区
if ( ${env:COMPUTERNAME} -ne "FORTRESS"){
    Foreach($disk in $DiskList)
    {
    		# 查找文件,这里以 photoshop.exe 为例
        $ExstsFile = Get-ChildItem -Path $Disk':\' -Recurse  -Name photoshop.exe
        
        # 将查找结果写入到共享
        if ($ExstsFile){
            echo $ExstsFile >> $UNCPath\$FileName$disk.txt
        } 
    }
}
exit

upload successful

# 删除本地组中无效的 AD 用户

upload successful

AD 环境中的本地组存在大量无效的 AD 用户,这些用户通常以 S-1 开头,有些强迫症用户就希望可以删除掉这些无效用户,于是就写了个删除无效 AD 用户的脚本

l
# 获取组成员
$GroupName = @(
# 替换 test 为你的本地组名称
([ADSI]"WinNT://./test").psbase.Invoke('Members') |
% { 
 $_.GetType().InvokeMember('AdsPath','GetProperty',$null,$($_),$null) 
}
) -match '^WinNT';
$GroupName = $GroupName -replace "WinNT://",""
foreach ($member in $GroupName)
{
# 替换 Domain 为你的组织域名
if ($member -like "$env:COMPUTERNAME/*" -or $member -like "Domain/*" -or $menber -like "BUILTIN/*")
{
    continue;
}
elseif ($member -match "S-1") #checking for empty/orphaned SIDs only
{
write-host $member
Remove-LocalGroupMember -group "${GroupName}" -member $member
}
write-host $member "check this users permissions if set in endpoint manager"
}

# 设置客户端壁纸

有的用户希望在没有 AD 域的情况统一客户端的壁纸,刚开始以为很简单,就写了个脚本通过注册表指定壁纸路径使其生效,后面发现切换到其它用户登录该壁纸不生效,于是就简单粗暴的添加了开机启动项实现其它用户登录也生效

l
@echo off
# 连接壁纸所在的共享目录
net use \\ivt-svr\soft password /user:ShareName
# 创建壁纸存放目录并隐藏
mkdir c:\wallpaper
attrib +s +h +r c:\wallpaper
# 复制共享中的壁纸到本地
xcopy /y \\ivt-svr\soft\zard.jpg c:\wallpaper\
# 断开共享连接
echo Y|net use \\ivt-svr\soft /del
# 添加注册表开机启动脚本
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v Wallpaper /t reg_sz /d c:\WallPaper\wp.bat /f
# 写入脚本内容
echo ^@echo off >> c:\WallPaper\wp.bat
echo reg add ^"hkcu^\control panel^\desktop^" ^/v wallpaper ^/d ^"c:^\wallpaper^\zard.jpg^" ^/f >> c:\WallPaper\wp.bat
echo RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters >> c:\WallPaper\wp.bat
# 复制脚本到开机启动菜单并隐藏
xcopy /y c:\WallPaper\wp.bat "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
attrib +s +h +r c:\WallPaper\wp.bat
attrib +s +h +r "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\wp.bat"
# 执行脚本
cmd /c c:\WallPaper\wp.bat

# 创建程序快捷方式,并替换图标

之前有用户想要用 ivanti 的软件门户,但是当初在配置代理的时候并没有配置将软件门户显示在用户桌面,现在想通过 EPM 后台推送一个任务创建快捷方式,并且将软件门户的图标替换成自己的公司 logo , 然后我就根据用户的需求写了个 powershell 的脚本

l
###################################################################################
# 该脚本可创建应用程序快捷方式,并更改其图标                                      #
###################################################################################
# 应用商城图标下载地址
$URL = "http://epm2022/software/Store.ico"
# 保存图标路径
$OouFile = "c:\windows\Store.ico"
# 下载图标并保存
Invoke-WebRequest -Uri $URL -OutFile $OouFile
###################################################################################
###################################################################################
# 指定快捷方式文件的路径
$shortcutPath = "C:\Users\Public\Desktop\软件商城.lnk"
# 指定新图标文件的路径
$iconPath = "C:\windows\Store.ico"
# 指定新图标的索引
$iconIndex = 0
###################################################################################
###################################################################################
# 创建 WshShell COM 对象
$shell = New-Object -ComObject WScript.Shell
# 创建快捷方式
$shortcut = $shell.CreateShortcut($shortcutPath)
# 更改图标路径和索引
$shortcut.IconLocation = "$iconPath,$iconIndex"
# 设置新的目标路径
$shortcut.TargetPath = "C:\Program Files (x86)\LANDesk\LDClient\LANDeskPortalManager.exe"
# 保存更改
$shortcut.Save()
###################################################################################
###################################################################################
# 释放 COM 对象
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($shortcut) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($shell) | Out-Null
Remove-Variable shortcut
Remove-Variable shell
###################################################################################