63 lines
2.0 KiB
PowerShell
63 lines
2.0 KiB
PowerShell
Function Set-NetConnectionSharing
|
|
{
|
|
Param
|
|
(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]
|
|
$LocalConnection,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[bool]
|
|
$Enabled
|
|
)
|
|
|
|
Begin
|
|
{
|
|
$netShare = $null
|
|
|
|
try
|
|
{
|
|
# Create a NetSharingManager object
|
|
$netShare = New-Object -ComObject HNetCfg.HNetShare
|
|
}
|
|
catch
|
|
{
|
|
# Register the HNetCfg library (once)
|
|
regsvr32 /s hnetcfg.dll
|
|
|
|
# Create a NetSharingManager object
|
|
$netShare = New-Object -ComObject HNetCfg.HNetShare
|
|
}
|
|
}
|
|
|
|
Process
|
|
{
|
|
#Clear Existing Share
|
|
$oldConnections = $netShare.EnumEveryConnection |? { $netShare.INetSharingConfigurationForINetConnection.Invoke($_).SharingEnabled -eq $true}
|
|
foreach($oldShared in $oldConnections)
|
|
{
|
|
$oldConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($oldShared)
|
|
$oldConfig.DisableSharing()
|
|
}
|
|
|
|
# Find connections
|
|
$InternetConnection = Get-NetRoute | ? DestinationPrefix -eq '0.0.0.0/0' | Get-NetIPInterface | Where ConnectionState -eq 'Connected'
|
|
$publicConnection = $netShare.EnumEveryConnection |? { $netShare.NetConnectionProps.Invoke($_).Name -eq $InternetConnection.InterfaceAlias }
|
|
$privateConnection = $netShare.EnumEveryConnection |? { $netShare.NetConnectionProps.Invoke($_).Name -eq $LocalConnection }
|
|
|
|
# Get sharing configuration
|
|
$publicConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($publicConnection)
|
|
$privateConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($privateConnection)
|
|
|
|
if ($Enabled)
|
|
{
|
|
$publicConfig.EnableSharing(0)
|
|
$privateConfig.EnableSharing(1)
|
|
}
|
|
else
|
|
{
|
|
$publicConfig.DisableSharing()
|
|
$privateConfig.DisableSharing()
|
|
}
|
|
}
|
|
} |