在Windows防火墙中使用通配符

时间:2018-07-26 13:22:06

标签: windows scripting wildcard windows-firewall

我们正在使用Turbo.net来发布应用程序。此应用程序之一(由我们自己的公司设计)使用广播在网络中查找设备,然后通过动态UDP端口(30000-50000)获得答复。不能在Windows防火墙上打开所有这些端口。

因此,我试图在Windows防火墙中指定exe文件。那行得通,但问题是,我需要为200个用户执行此操作。所以我想由GPO来做。不幸的是,exe的路径是这样的:

%userprofile%\ AppData \ Local \ Spoon \ Servers \ apps.elpro.com \ Users \ Firstname.Lastname.Domain \ Sandboxes \ ECOLOGPROModuleConfigurator__1-4-8-420__en-us__Default__AnyCpu \ local \ stubexe \ 0x4D80DB43F65B57C8 \ PROModuleConfigurator。

问题是“ \ Firstname.Lastname.Domain \”。我无法在Windows防火墙中找到使用通配符的方法。

似乎Windows防火墙不允许使用通配符。

是否可以轻松解决此问题,或者是否需要编写脚本以及如何编写脚本?

谢谢!

1 个答案:

答案 0 :(得分:0)

它可以处理 %userprofile% 的事实告诉你它可以处理 Windows 变量,所以要做的事情是设置更多这样的变量,将此路径作为 %userprofile%\AppData\Local\Spoon\Servers\apps.elpro.com\Users\%Firstname%.%Lastname%.Domain\...

抱歉,没有适合您的复制粘贴解决方案。您需要编写一些脚本才能从 Active Directory(或某些 Linux/Unix LDAP 服务器 - 无论您的组织使用什么)中提取此名称数据,并在每个用户的基础上填充这些变量。从好的方面来说,一旦您设置这些变量,它们就可以有其他用途,例如以 %Lastname%, %Firstname% 格式命名 NAS 上的备份目录,等等。

具体如何执行此操作会因编码语言、操作系统版本和目录服务类型而异。关于这方面的信息分散得很远,所以你必须四处搜索一下。例如,关于如何在 dotNet 3.0+ 下使用 C# 获取 AD 用户的真实姓名,请参见 this StackOverflow thread。还有 lots of SO threads 包含有关在 Powershell 中使用 Get-ADUser 查找和过滤用户 ID 和名称的信息。 This thread on SpiceWorks 也可能会引起您的兴趣。

您几乎肯定会需要 Remote Server Administration Tools (RSAT) for Windows(有关安装详细信息,请参阅该页面,根据操作系统版本的不同,即使在 Windows 10 中也完全不同!)。处理 ActiveDirectory 的工具需要 RSAT 中的 AD 内容来完成它们的工作,包括 Powershell 和 C#.Net。 RSAT 需要 Windows 专业版或企业版(在您将用于执行 AD 工作的机器上;用户工作站可以是任何版本)。但是 AD 本身需要 Windows Server。

这仅适用于 Active Directory 或其他 LDAP 服务器,其中甚至存储了此用户的名字/姓氏信息。本地帐户根本没有这些信息,除非他们以经过修改的“全名”形式继承它,例如来自 Microsoft.com 帐户凭据。在 Powershell 中,您可以运行“Get-LocalUser |选择 *',或遵循更“深入”的本地 ADSI 方法 demonstrated here,您将找不到名字和姓氏数据。它只是不是帐户的一部分,缺少注入它的一些系统方法(AD,或 Microsoft 在线帐户连接,或 Microsoft 家庭组管理等)。有 multiple ways of manually adding "full name",但即使在一群用户中这样做也可能对您没有帮助,因为人名不容易被软件解析为名字和姓氏(许多人有两个姓氏,许多人有两个姓氏)或更多的名字;那么什么是“Pat Morgan Otero”?当然,名字与姓氏的顺序在文化上有所不同。)似乎无法将单独的名字和姓氏字段添加到本地帐户; Set-LocalUser 之类的工具无法做到。

[aside]Windows 用户数据和 Windows Subsystem for Linux 用户数据之间没有联系(即使用户名可以不同),所以这没有帮助。 如果你有一个通过 LDAP 或其他方式的全网统一用户 ID 系统,并且它的最终结果是每个人的用户 ID 和他们的真实姓名都在任何网络上的 Linux/Unix 系统(打印服务器、NAS、任何您可以获得特权 shell 访问权限的东西),那么您可能会更容易使用它,因为 Linux/Unix 中 bash 可用的文本处理工具(包括 macOS),例如 grepsedawk。您所需要的只是一个命令行工具,用于访问 LDAP(或其他)以运行目录查询,然后解析名称信息的结果。或者该名称信息甚至可能已经存在于那个 Linux 机器的 passwd 文件中。这就是我为一个客户做类似事情的方式,但它是一个 Linux 重的商店。如果您有任何(或大多数)用户在仅限 Windows 的用户范围内与 Linux 隔离,那么这种方法将不起作用。[/aside]

看起来使用基于 Windows 的脚本/编程在 Windows 中访问 AD 数据(或 LDAP 等)是完成您想做的事情的唯一确定方式。即便如此,它也只有在数据存在且正确时才有效。您需要在配置帐户后不允许人们更改姓名(例如通过删除姓氏)的组策略,以及管理员在设置帐户时必须输入此数据的人工程序规则,并且它是正确和完整(不缺少姓氏,也不是以后可能会被替换掉甚至可能出现在多台机器上的占位符或角色数据)。

PS:最终,我认为您应该写信给该软件的创建者,并要求他们停止在路径中使用名字和姓氏,因为这会破坏其产品的可管理性。