本人编写了一个VB . net前端的office SQL server。我想扩展这个功能,以便用户可以通过VPN访问服务器。在测试过程时,如果我在每个客户端PC上也启用了"文件和打印机共享",我只能通过VPN看到SQL服务器,所以我想要一些代码来检查VPN和共享在尝试访问服务器之前是否启用。我有以下三行代码检查VPN是否正在运行:
Dim myInterfaceList As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces
Dim myVPNRunning As Boolean = myInterfaceList.AsEnumerable().Any(Function(x) x.Name = "MyTestVPN")
If myVPNRunning Then chkProgress3.Checked = True
但是我找不到一种方法(在vb.net中)来检查客户端PC是否启用了"文件和打印机共享"。我找到了这篇讨论使用Powershell检查的文章1,但我不知道如何将其转换为vb.net代码(或者即使这是正确/最好的方法)。办公室网络不是Domain,所以我不能通过组策略启用共享。
有其他人解决过这个问题吗?谢谢,蒂姆。
下面展示了如何检查在VB.NET中使用PowerShell是否启用了文件和打印机共享。
下载/安装PowerShell NuGet包
Microsoft.PowerShell.5.1.ReferenceAssemblies
(。净框架)Microsoft.PowerShell.SDK
(;网6)
更多信息请看这篇文章
添加以下Imports语句:
Imports System.Management.Automation
IsFileAndPrinterSharingEnabled:
Private Function IsFileAndPrinterSharingEnabled() As Boolean
Using ps As PowerShell = PowerShell.Create()
Dim result As String = ps.AddScript("Get-NetAdapterBinding | ? {$_.DisplayName -eq 'File and Printer Sharing for Microsoft Networks' -and $_.Name -eq 'ethernet'} | Select -ExpandProperty Enabled").Invoke()(0).ToString()
'Dim result As String = ps.AddScript("Get-NetAdapterBinding | ? {$_.DisplayName -eq 'File and Printer Sharing for Microsoft Networks' -and $_.Name -eq 'ethernet'} | ForEach-Object {$_.Enabled}").Invoke()(0).ToString()
If result = "True" Then
Return True
End If
End Using
Return False
End Function
:
- 文件和打印机共享状态
- 使用PowerShell输出没有列标题的数据
其他资源
- 无法从客户端设备通过c#表单应用程序访问我的SQL Server
- SMB:文件和打印机共享端口应该打开
- 如何在Windows中检测、启用和禁用SMBv1、SMBv2和SMBv3