C# 如何使用SCCM将文件替换为网络上的所有用户配置文件
我想从服务器复制一个xml文件,然后连接到所有用户配置文件,并用从服务器复制的文件覆盖用户配置文件xml文件。我想这是一个可执行文件,以便它可以运行与SCCM为所有用户。我知道必须有管理权限,但我不确定如何编码。我也愿意接受如何以不同的方式实现这一点的想法,但我确实希望用C实现这一点,并将其变成SCCM的可执行文件C# 如何使用SCCM将文件替换为网络上的所有用户配置文件,c#,sccm,C#,Sccm,我想从服务器复制一个xml文件,然后连接到所有用户配置文件,并用从服务器复制的文件覆盖用户配置文件xml文件。我想这是一个可执行文件,以便它可以运行与SCCM为所有用户。我知道必须有管理权限,但我不确定如何编码。我也愿意接受如何以不同的方式实现这一点的想法,但我确实希望用C实现这一点,并将其变成SCCM的可执行文件 namespace copy_delete_move_files { public class SimpleFileCopy { public
namespace copy_delete_move_files
{
public class SimpleFileCopy
{
public static object Logger { get; private set; }
static void Main()
{
string fileName = "Customize.xml";
string sourcePath = @"\\pathToServer\c$\TestFolder";
string targetPath = @"\\pathToUserProfiles\c$\%USERPROFILE%\APPDATA\Roaming\Folder\Customize";
// Use Path class to manipulate file and directory paths.
string sourceFile = Path.Combine(sourcePath, fileName);
string destFile = Path.Combine(targetPath, fileName);
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!Directory.Exists(targetPath))
{
Directory.CreateDirectory(targetPath);
}
// To copy a file to another location and
// overwrite the destination file if it already exists.
File.Copy(sourceFile, destFile, true);
// To copy all the files in one directory to another directory.
// Get the files in the source folder.
// Note: Check for target path was performed previously
// in this code example.
if (Directory.Exists(sourcePath))
{
string[] files = Directory.GetFiles(sourcePath);
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
// Use static Path methods to extract only the file name from the path.
fileName = Path.GetFileName(s);
destFile = Path.Combine(targetPath, fileName);
File.Copy(s, destFile, true);
}
}
else
{
Console.WriteLine("Source path does not exist!");
}
// Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
使用SCCM,您可以通过以下步骤实现这一点: 以适合一个用户的方式创建程序整个多用户部分将留给sccm您只需以适合您双击的任何用户的方式编写即可。作为appdata路径,您只需使用以下内容:
string fileNameWithExt = "your folderpath and filename";
string destPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), fileNameWithExt);
在SCCM中,当您在向导中创建程序时,选择“程序可以运行:仅当用户登录时”和“运行模式:使用用户权限运行”。创建后,输入程序的属性,转到“高级”并选择将此程序分配给计算机的时间:为每个登录的用户运行一次
这确保了不仅现在的所有用户,而且将来的所有用户都将获得该程序。如果您确实想从服务器复制,它也会帮助您,因为默认情况下,SCCM使用本地系统帐户,该帐户对您的服务器共享没有访问权限,尽管您可以授予它们。也可以通过应用程序而不是程序来实现
缺点是:
您的所有用户都必须被允许访问该共享
通过使用sccms分配点方法绕过,但会更
如果服务器上的文件经常更新,则会很复杂
如果您需要任何操作的管理员权限,这是不可能的
方法如果管理员权限仅针对非每个用户的部件
具体来说,你可以把程序分成两部分,每台机器一部分,
每台电脑一台。
好的,我刚刚意识到%USERPROFILE%创建了一个目录和所有子目录,并将文件的副本放在最终文件夹中。我需要它来获取它所连接的所有计算机的所有用户,并且只替换自定义文件夹及其内容。好的,当然有一种方法可以使用具有系统权限的可执行文件查询所有用户配置文件,但这并不总是一个好主意。由于只执行一次,因此创建的每个新概要文件都不会受到影响。还需要在服务器上读取系统。SCCM还可以为现在和将来登录到计算机的每个用户运行一次程序,这使得编码更加容易。您可以使用%appdata%,并且不必考虑是否有任何形式的漫游配置文件处于活动状态,尽管您可以排除这种情况。对你来说可以吗?@Syberdoor这正是我想要的。我希望任何登录的用户都能将该xml文件复制到其配置文件中的指定路径。它将创建自定义文件夹并将xml文件放入其中,覆盖其中的任何其他文件。如何使用代码中的%appdata%向下搜索到每个用户的指定文件路径?谢谢,这看起来正是我需要的。我对编程还是相当陌生,尤其是C。你能解释一下更好的应用程序吗?我理解带有Ext的文件名,我相信UserAppDataPath是指向特定用户AppDataPath的路径,但我对应用程序部分不太清楚。它只是一个带有静态方法的类,可以用来获取appdata文件夹。然而,我只是从我自己的一个示例中复制了它,并且看到它只在winforms项目中可用,所以可能不适合您。您可能应该改为使用Environment.GetFolderPathEnvironment.SpecialFolder.ApplicationData或其他需要您帮助的工具。