小编mcl*_*ton的帖子

PowerShell DSC - 如何将配置参数传递给ScriptResources?

我在尝试使用PowerShell所需状态配置脚本来配置内部应用程序时遇到了很多麻烦.问题的根源是我似乎无法将配置数据传递给ScriptResource(至少不是我尝试这样做的方式).

我的脚本应该为我们的内部应用程序创建一个配置文件夹,然后将一些设置写入文件:

configuration MyApp {
    param (
        [string[]] $ComputerName = $env:ComputerName
    )
    node $ComputerName {

        File ConfigurationFolder {
            Type = "Directory"
            DestinationPath = $Node.ConfigFolder
            Ensure = "Present"
        }

        Script ConfigurationFile {
            SetScript = {
                write-verbose "running ConfigurationFile.SetScript";
                write-verbose "folder = $($Node.ConfigFolder)";
                write-verbose "filename = $($Node.ConfigFile)";
                [System.IO.File]::WriteAllText($Node.ConfigFile, "enabled=" + $Node.Enabled);
            }
            TestScript = {
                write-verbose "running ConfigurationFile.TestScript";
                write-verbose "folder = $($Node.ConfigFolder)";
                write-verbose "filename = $($Node.ConfigFile)";
                return (Test-Path $Node.ConfigFile);
            }
            GetScript = { @{Configured = (Test-Path $Node.ConfigFile)} }         
            DependsOn = "[File]ConfigurationFolder"
        } …
Run Code Online (Sandbox Code Playgroud)

powershell dsc

25
推荐指数
4
解决办法
2万
查看次数

PowerShell - 函数中的"写输出"与"返回"

我已经使用PowerShell多年了,我认为我已经掌握了一些更"古怪"的行为,但我遇到了一个问题,我无法做出头脑或尾巴...

我总是使用"return"来返回函数的值,但最近我想我会把Write-Output作为替代.但是,PowerShell是PowerShell,我发现一些似乎没有意义的东西(对我来说,至少):

function Invoke-X{ write-output @{ "aaa" = "bbb" } };
function Invoke-Y{ return @{ "aaa" = "bbb" } };

$x = Invoke-X;
$y = Invoke-Y;

write-host $x.GetType().FullName
write-host $y.GetType().FullName

write-host ($x -is [hashtable])
write-host ($y -is [hashtable])

write-host ($x -is [pscustomobject])
write-host ($y -is [pscustomobject])
Run Code Online (Sandbox Code Playgroud)

输出:

System.Collections.Hashtable
System.Collections.Hashtable
True
True
True
False
Run Code Online (Sandbox Code Playgroud)

$ x和$ y(或'write-output'和'return')之间有什么区别,这意味着它们都是哈希表,但只有其中一个'-is'是一个pscustomobject?有没有一种通用的方法我可以确定与代码的区别,除了显然检查我在变量中的每个哈希表是否也是一个pscustomobject)?

我的$ PSVersionTable看起来像这样,以防此行为特定于特定版本的PowerShell:

Name                           Value
----                           -----
PSVersion                      5.1.16299.492
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.16299.492
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion …
Run Code Online (Sandbox Code Playgroud)

syntax powershell pscustomobject psobject

10
推荐指数
1
解决办法
1448
查看次数

C# 9 - 使用实体框架更新记录上的 init-only 属性

C# 9 引入了记录init-only 属性,以便更轻松地编写不可变的引用对象。

我一直在尝试将旧的 Entity Framework 项目转换为使用这些功能,但在具有 init-only 属性的不可变 C# 记录和尝试对底层 SQL 记录进行更改之间遇到了一些摩擦。

也许我只是在推动流程,但是是否有一种模式可以将您的 C# 类定义为不可变的 init-only 记录,但仍然允许更新底层 SQL 数据?

我当前使用可变类的(工作)代码:

MyReport.cs

namespace MyNamespace 
{
    public sealed class MyReport
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ReportId { get; set; }

        public DateTime ReportDate { get; set; }
        public bool ReadyToUse { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序

using (var dbContext = DbContext.Create(connectionString))
{
    // create a new report
    var myReport = new MyReport
    { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework c#-9.0

3
推荐指数
1
解决办法
637
查看次数

列出 git 历史记录中已删除但*未*重新添加的文件

我试图列出分支历史记录中任何一点存在但随后被删除且不存在于该分支的最新提交中的所有文件的名称。

其他类似(但不相同)问题的答案表明:

git log --all --pretty=format: --name-only --diff-filter=D
Run Code Online (Sandbox Code Playgroud)

但这列出了分支历史记录中所有提交的所有单个文件删除操作,而不考虑文件是否被重新添加。

我经常使用 git ,这很危险,而且我的术语可能有点偏差,所以这里是我想要做的一个具体例子:

git init

:: add three files
echo aaa > aaa.txt
echo bbb > bbb.txt
echo ccc > ccc.txt
git add --all
git commit -m "initial commit"

:: delete aaa.txt, bbb.txt
del aaa.txt
del bbb.txt
git add --all
git commit -m "delete aaa.txt, bbb.txt"

:: re-add aaa.txt
echo zzz > aaa.txt
git add --all
git commit -m "re-add aaa.txt"
Run Code Online (Sandbox Code Playgroud)

我正在尝试弄清楚我需要列出什么命令bbb.txt- 我不在乎它aaa.txt在某个时候被删除,因为它后来被重新添加,所以它当前存在于分支的尖端。

我也不关心文件的内容 …

git

3
推荐指数
1
解决办法
133
查看次数

将 ASPNET API 添加到现有 Worker Service 项目

我目前有一个 dotnet 5.0 Worker Service 项目,该项目托管一个后台服务,该服务定期执行业务线流程。我设法通过在CreateHostBuilder方法内设置主机来摸索,并且这一切都作为 docker 容器内的可执行文件运行良好。

但是,我现在想添加一个 HTTP api / ui,以便我可以公开一个“健康”端点和一些漂亮的网页,这些网页访问与后台服务相同的进程内内存,以执行诸如显示 in 的内容之类的操作。 -内存缓存、逐出缓存条目、手动触发业务流程的运行等,我完全迷失了。

我想我只是以某种方式在绑定ConfigureServices到我指定的端口上的 ASPNET razor 项目中定义的类的方法中配置一个额外的托管服务,但经过几次尝试后,我有点困惑如何开始解决这个问题,更不用说让它真正发挥作用:-(。

具体来说,我有一个如下所示的 C# 项目:

我的Worker.csproj

<Project Sdk="Microsoft.NET.Sdk.Worker">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
    <PackageReference Include="Serilog.Extensions.Hosting" Version="4.0.0-dev-00051" />
    <PackageReference Include="Serilog.Formatting.Compact" Version="1.1.1-dev-00940" />
    <PackageReference Include="Serilog.Sinks.Console" Version="4.0.0-dev-00839" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\MyAppCode\MyAppCode.csproj" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

和一个如下所示的Program.cs :

        public static void Main(string[] args)
        {

            Program.InitSerilog();
            Program.CreateHostBuilder(args).Build().Run();

        }

        public static void InitSerilog()
        {
            ... do …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker .net-core asp.net-core

1
推荐指数
1
解决办法
2898
查看次数