PowerShell脚本开发尝试登录SQL Server
前三篇文章中创建了PSNet程序集,其中包含了对指定IP进行端口扫描,收发TCP消息包和收发UDP消息包的相关功能,作为这是最基本的对网络情况的最基本检测,后续的文章将会对此程序集进行不断的扩充使其包含更全面的功能。但是光有这些简单网络探测的功能还远远不够,为了能更全面的使用PowerShell针对网络安全进行检测,在本文中将会创建PSSecurity程序集用于存放相关通过PowerShell的脚本。参照前几篇文章中创建PSNet程序集的方法和目录结构创建PSSecurity程序集目录,便于后续对程序集的扩展。
具体详细的步骤请参见前几篇文章,创建PSSecurity程序集之后的目录结构和文件如下所示:
+D:\MYDOCUMENTS\WINDOWSPOWERSHELL\MODULES └─PSSecurity │ PSSecurity.psm1 │ └─SQLServer Get-SqlSysLogin.ps1
在$Profile中添加:
Import-Module$env:PSSpace\PSSecurity #用于在PowerShell启动时自动加载PSSecurity程序集
其中PSSecurity.psm1中的内容如下:
.$env:PSSpace/PSSecurity/SQLServer/Get-SqlSysLogin.ps1#导入Get-SqlSysLogin函数 Write-Host"PSSecurityModuleAdded"-BackgroundColorgreen-ForegroundColorblue#用于提示此模块已加载 Export-ModuleMember-Function* #用于将函数导出为模块成员
接下来就是Get-SqlSysLogin.ps1的内容了
=====文件名:Get-SqlSysLogin.ps1===== functionGet-SqlSysLogin{
Param( [Parameter(Mandatory=$true, Position=0, ValueFromPipeLine=$true)] [Alias("PSComputerName","CN","MachineName","IP","IPAddress")] [string]$ComputerName, [parameter(Position=1)] [string]$UserName, [parameter(Position=2)] [string]$Password ) Process{ $Connection=New-ObjectSystem.Data.SQLClient.SQLConnection if($userName){ $Connection.ConnectionString="DataSource=$ComputerName;InitialCatalog=Master;UserId=$userName;Password=$password;" }else{ $Connection.ConnectionString="server=$computerName;InitialCatalog=Master;trusted_connection=true;" } Try{ $Connection.Open() $Command=New-ObjectSystem.Data.SQLClient.SQLCommand#创建SQLClient对象 $Command.Connection=$Connection $Command.CommandText="SELECT*FROMmaster.SYS.syslogins" #从syslogin表读取SQLServer登录账户 $Reader=$Command.ExecuteReader() $Counter=$Reader.FieldCount while($Reader.Read()){ $SQLObject=@{} for($i=0;$i-lt$Counter;$i++){ $SQLObject.Add( $Reader.GetName($i), $Reader.GetValue($i) ); } #获取登录类型 $type= if($sqlObject.isntname-eq1){ if($sqlObject.isntgroup-eq1){ "NTGroup" }else{ "NTUser" } }else{ "SQLServer" }
New-ObjectPSObject-Property@{ Name=$sqlObject.loginname; Created=$sqlObject.createdate; DenyLogin=[bool]$sqlObject.denylogin; HasAccess= [bool]$sqlObject.hasaccess; Type=$type; SysAdmin=[bool]$sqlObject.sysadmin; SecurityAdmin=[bool]$sqlObject.securityadmin; ServerAdmin=[bool][bool]$sqlObject.serveradmin; SetupAdmin=[bool]$sqlObject.setupadmin; ProcessAdmin=[bool]$sqlObject.processadmin; DiskAdmin=[bool]$sqlObject.diskadmin; DBCreator=[bool]$sqlObject.dbcreator; NTUser=[bool]$sqlObject.isNTUser; ComputerName=$ComputerName }|Select-ObjectName,Created,Type,DenyLogin,HasAccess,SysAdmin,SecurityAdmin,ServerAdmin,SetupAdmin,ProcessAdmin,DiskAdmin,DBCreator,NTUser,ComputerName } $Connection.Close() } Catch{ $error[0] } } }