powershell - 如何在 PowerShell 中 Ping DirectAccess IPSec 隧道端点?
问题描述
我目前正在做的一件事是创建一个脚本,该脚本将获取系统信息、映射驱动器、网络配置等。我希望能够从 DirectAccess IPSec 隧道端点获取 IPv6 地址并对其进行 ping 操作。
这是我到目前为止所得到的:
##----------------------------------------------------------
## Variables
##----------------------------------------------------------
$Command = {[PSCustomObject]@{
'computerSystem' = get-wmiobject Win32_ComputerSystem
'computerMappedDrives' = Get-WmiObject -Class Win32_MappedLogicalDisk | Select-Object name,providername
'computerEventErrorsApp' = Get-EventLog -LogName Application -EntryType Error -Newest 10 | Select-Object timegenerated,source,message
'computerEventErrorsSys' = Get-EventLog -LogName System -EntryType Error -Newest 10 | Select-Object timegenerated,source,message
'computerDAClient' = Get-DAClientExperienceConfiguration
'computerDAStatus' = Get-DAConnectionStatus
'computerOfflineFiles' = Get-WmiObject -Class win32_OfflineFilesCache
}}
$data = Invoke-Command -ScriptBlock $Command
Logging -Text ("HOSTNAME : " + $env:COMPUTERNAME) -LogFile $logfile
Logging -Text ("USER LOGGED IN : " + $data.computerSystem.UserName) -LogFile $logfile
Logging -Text ("DIRECT ACCESS NAME : " + $data.computerDAClient.FriendlyName) -LogFile $logfile
Logging -Text ("DIRECT ACCESS STATUS : " + $data.computerDAStatus.Status) -LogFile $logfile
Logging -Text ("OFFLINE FILES : " + ($data.computerOfflineFiles | Select-Object Enabled)) -LogFile $logfile
##----------------------------------------------------------
## Network Drives
##----------------------------------------------------------
foreach ($mappeddrive in $data.computerMappedDrives)
{
Logging -Text ("NETWORK DRIVES MAPPED : " + $mappeddrive.name + " -> " + $mappeddrive.providername) -LogFile $logfile
}
Write-Host "-NETWORK DRIVES COLLECTED-" -ForegroundColor Green
这是执行此命令的结果
$data.computerdaclient
Description : DA Client Settings
CorporateResources : {HTTP:http://directaccess-WebProbeHost.xxx, HTTP:http://directaccess-webprobehost.xxx/}
IPsecTunnelEndpoints : {PING:fd51:3db1:xxxx:xxxx::1, PING:fd51:3db1:xxxx:xxxx::2, PING:fd45:4035:xxxx:xxxx::1, PING:fd45:4035:xxxx:xxxx::2}
CustomCommands :
PreferLocalNamesAllowed : True
UserInterface : True
PassiveMode : False
SupportEmail : DA_support@xxxx
FriendlyName : Direct Access
ManualEntryPointSelectionAllowed : True
GslbFqdn :
ForceTunneling : Default
如何从中提取价值IPSecTunnelEndpoint
并在之后执行ping
?
解决方案
我认为我现在已经开始工作了:
(Get-DAClientExperienceConfiguration).IPsecTunnelEndpoints | ForEach-Object{
If($_ -like '*PING:*'){
$ipsec= $_.replace('PING:','')
Write-Host ("TEST CONNECTION TO: " + $ipsec)
Test-Connection $ipsec
}
}
结果是:
TEST CONNECTION TO: fd45:4035:xxxx:1000::2
Pinging fd45:4035:xxxx:1000::2 with 32 bytes of data:
Reply from fd45:4035:xxxx:1000::2: time=6ms
Reply from fd45:4035:xxxx:1000::2: time=9ms
Reply from fd45:4035:xxxx:1000::2: time=13ms
Reply from fd45:4035:xxxx:1000::2: time=14ms
Ping statistics for fd45:4035:xxxx:1000::2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 6ms, Maximum = 14ms, Average = 10ms