小编wot*_*324的帖子

PowerShell:将函数作为参数传递

我编写了函数'A',它将调用许多其他函数之一.为了保存重写函数'A',我想传递函数作为函数'A'的参数调用.例如:

function A{
    Param($functionToCall)
    Write-Host "I'm calling : $functionToCall"
}

function B{
    Write-Host "Function B"
}

Function C{
    write-host "Function C"
}

A -functionToCall C
Run Code Online (Sandbox Code Playgroud)

返回:我正在打电话:C

我期待它回归:我在呼唤:功能C.

我尝试了各种各样的东西,比如:

Param([scriptblock]$functionToCall)
Run Code Online (Sandbox Code Playgroud)

无法将System.String转换为ScriptBlock

A -functionToCall $function:C
Run Code Online (Sandbox Code Playgroud)

返回"写主机"功能C"

A - functionToCall (&C)
Run Code Online (Sandbox Code Playgroud)

这在其余部分之前进行评估:

 Function C
 I'm Calling :
Run Code Online (Sandbox Code Playgroud)

我确定这是编程101,但我无法弄清楚正确的语法或它是什么我做错了.我们将非常感激地提供任何帮助.非常感谢.

powershell parameter-passing calling-convention

32
推荐指数
5
解决办法
2万
查看次数

参数可以在一个 YAML 文件中定义并在另一个 YAML 文件中重用吗?

长话短说

是否可以在模板 YAML 中包含参数及其值,并在准备运行管道时让主 YAML 读取列表并将它们显示在下拉列表中?

与“变量重用”的 MS 示例非常相似,如下所示

# File: vars.yml
variables:
  favoriteVeggie: 'brussels sprouts'
Run Code Online (Sandbox Code Playgroud)
# File: azure-pipelines.yml

variables:
- template: vars.yml  # Template reference

steps:
- script: echo My favorite vegetable is ${{ variables.favoriteVeggie }}.
Run Code Online (Sandbox Code Playgroud)

细节

我有一个大约 50 个值的列表,这些值每周都在增长。当运维人员运行我的管道时,我希望他们从下拉列表中选择一个值。

这可以简单地通过在管道 YAML 文件中指定参数块来实现azure-pipeline.yml

parameters:
- name: subscription
  displayName: Subscription Name
  type: string
  default: sub A
  values:
  - sub A
  - sub B
  - sub C
  - sub D
Run Code Online (Sandbox Code Playgroud)

这给了我 UI 中的下拉菜单:

运行管道下拉菜单

在上面的示例中,只有 4 个值,但是,我们有超过 50 …

azure-devops azure-pipelines azure-pipelines-yaml

8
推荐指数
1
解决办法
2万
查看次数

从现有 YAML 设置 GitHub 工作流程

我有一个想要运行的 YAML 管道,但我不知道如何告诉 GitHub 使用我的文件并阻止它创建新文件。

yaml 文件位于.github/workflows我的develop分支中。

在 GitHub 的“操作”下,如果我单击“自己设置工作流程”,则会执行以下操作:

在此输入图像描述

路径是正确的,但它默认为默认master分支,单击master只会将我带到视图code。我找不到方法将其更改为develop

我相信代码的相关部分是:

name: CI

# Controls when the action will run.
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
Run Code Online (Sandbox Code Playgroud)

如果我理解正确workflow_dispatch应该允许它手动运行,但它似乎没有列出。

我确信这是 101,但我无法算出来。如果有人有任何想法,请分享,我将不胜感激。

更新1

@flaxon 向我展示了如何更改 URL 以指向正确的分支后,我仍然无法运行工作流程。即使我让 GitHub …

github-actions

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

PowerShell:查找确切的文件夹名称

我正在尝试找到一种方法来返回给定文件夹的完整路径.问题是如果有一个类似的命名文件夹,我的代码会返回多个文件夹.例如,搜索"Program Files",返回"Program Files"和"Programs Files (x86) ".因为我没有要求"程序文件(x86),我不希望它返回它.我正在使用:

$folderName = "Program Files"
(gci C:\ -Recurse | ?{$_.Name -match [regex]::Escape($folderName)}).FullName
Run Code Online (Sandbox Code Playgroud)

我想用-eq替换-match,但它会在比较整个路径时返回$ false.

我想过可能会返回所有匹配项,然后要求用户选择哪一个是正确的,或者创建一个数组,将路径拆分并在每个文件夹名称上执行-eq然后再次加入路径,但我的技能缺乏在数组部门,无法让它工作.

我们将非常感激地提供任何帮助或指示.

谢谢

感谢Frode,这是我用过的东西:

$path = gci -Path "$drive\" -Filter $PartialPath -Recurse -ErrorAction SilentlyContinue #| ?{$_.PSPath -match [regex]::Escape($PartialPath)} 

($path.FullName | gci -Filter $filename -Recurse -ErrorAction SilentlyContinue).FullName
Run Code Online (Sandbox Code Playgroud)

directory powershell match exact-match

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

将容器名称作为参数传递给 BlobTrigger

我有一个小的 C# 应用程序,当一个新的 blob 被添加到存储帐户中的容器时,它会做一些事情。

我正在使用 Visual Studio 2017 在本地工作。

VS 模板给了我:

using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace LogicAppTriggerFunction
{
    public static class BlobTrigger
    {
        [FunctionName("BlobTrigger")]
        public static void Run([BlobTrigger("samples-workitems/{name}", Connection = "")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图"samples-workitems"用一个与我的容器名称相关的变量来替换。我只想使用一个容器,但我不想对其进行“硬编码”。

如果我在正确的行上,则此设置存储在function.json编译时构建的内容中。在本地工作时,我认为 / 认为 的内容function.json是由 读取的local.settings.json,但是我现在认为这是针对 appSettings.json。

阅读 MS doco,尤其是在trigger bindings 上,看起来myContainer/{name}应该从 …

azure azure-storage azure-functions

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

在资源级别使用 for / for_each 迭代嵌套数据

我正在尝试解决如何使用 Terraform 0.12.10 从以下 tfvars 文件中给出的复杂对象中迭代嵌套变量:

例子.tfvars

virtual_network_data = {
  1 = {
    product_instance_id              = 1
    location                         = "somewhere"
    address_space                    = ["192.168.0.0/23"]
    dns_servers                      = []
    custom_tags                      = {"test":"test value"}
    subnets                          = [
      {
        purpose = "mgmt"
        newbits = 4
        item = 0
      },
      {
        purpose = "transit"
        newbits = 4
        item = 1
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

例子.tf

variable "virtual_network_data" {} #Data comes from example.tfvars

variable "resource_group_name" {
    default = "my_resource_group"
}

variable "virtual_network_name" {
    default = "my_virtual_network"
}

#### …
Run Code Online (Sandbox Code Playgroud)

terraform

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

ConvertFrom-JSON到object

它看起来像我期待这种方式工作的方式不是.我想要返回多个对象,但它似乎只返回一个.我不知道如何做到这一点.

一个非常简单的JSON文件:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "value": "sa01"
    },
    "virtualNetworkName": {
      "value": "nvn01"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想动态地将参数及其值添加到一个漂亮的pscustomobject中(对于上面的数据看起来如下):

ParameterName      | Value
===========================
storageAccountName | sa01
virtualNetworkName | nvn01
Run Code Online (Sandbox Code Playgroud)

我不明白为什么以下返回一个对象:

$TemplateParametersFile = "C:\Temp\deploy-Project-Platform.parameters.json"
$content = Get-Content $TemplateParametersFile -Raw

$JsonParameters = ConvertFrom-Json -InputObject $content
$JsonParameters.parameters | Measure-Object
Run Code Online (Sandbox Code Playgroud)

在写这篇文章的同时,我最终找到了一个能够得到我想要的解决方案,我将在答案部分发布.随意上学,改进......

powershell json azure

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

Puppet:如何删除目录及其中的所有内容

我确信这真的很简单,但我无法解决。

我想删除该目录C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1。到目前为止,我的尝试已成功删除目录中的所有内容1.0.0.1,但我无法弄清楚如何删除实际目录。

我确实考虑过提升一个级别,但这意味着当我复制该模块的新版本 ( 2.2.5) 时,在下次运行时,Puppet 将删除它。

这是我的两次尝试:

文件资源

file { "${modules_path}/PowerShellGet/1.0.0.1" :
  ensure  => directory,
  recurse => true,
  purge   => true,
  force   => true,
}
Run Code Online (Sandbox Code Playgroud)

整齐的资源

tidy { "${modules_path}/PowerShellGet/1.0.0.1" :
  age     => 0,
  recurse => true,
  rmdirs  => true,
}
Run Code Online (Sandbox Code Playgroud)

TIA

puppet

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