小编Joh*_*man的帖子

如何从字符串中执行任意本机命令?

我可以通过以下方案表达我的需求:编写一个接受字符串的函数作为本机命令运行.

这并不是一个想法:如果你正在与公司其他地方的其他命令行实用程序连接,那么它将为你提供逐字运行的命令.因为您不控制命令,所以您需要接受任何有效的命令作为输入.这些是我无法轻易克服的主要问题:

  1. 该命令可能执行生活在其中包含空格的路径中的程序:

    $command = '"C:\Program Files\TheProg\Runit.exe" Hello';
    
    Run Code Online (Sandbox Code Playgroud)
  2. 该命令可能包含带空格的参数:

    $command = 'echo "hello world!"';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 该命令可能包含单蜱和双蜱:

    $command = "echo `"it`'s`"";
    
    Run Code Online (Sandbox Code Playgroud)

没有干净的方法来完成这个?我只能设计出奢华和丑陋的变通方法,但对于脚本语言,我觉得这应该是简单的.

powershell scripting

195
推荐指数
3
解决办法
22万
查看次数

如何在Powershell中将switch参数标记为必需

我很确定除了我发现的东西之外我没有任何其他选择,但我想选择集体的互联网大脑.

在将布尔值传递给自定义函数时,我更喜欢使用[switch]参数.但是,我有几种情况需要将switch参数标记为必需.这可以通过参数的[parameter(Mandatory = $ true)]选择性地完成.但是,我真的不喜欢出现的UI提示.我更喜欢抛出异常.

但是,一个开关可以是true或false,而"IsPresent"属性没有区别.如果我将switch参数传递为-example:$ false,则交换机报告$ example.IsPresent为false!

我已经使用了[bool].例如:

param
(
   [bool]$theValue = $(throw('You didn't specify the value!'))
);
Run Code Online (Sandbox Code Playgroud)

我还有其他技巧吗?

parameters powershell switch-statement

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

Powershell是否忘记在解析器错误上设置ERRORLEVEL?

在命令提示符中,试试这个:

powershell aaa

echo ErrorLevel是%errorlevel%

Powershell将失败(出错).您还会看到" ErrorLevel为1 ".这是因为它将aaa作为脚本运行,这会产生未处理的错误,从而设置errorlevel.

但是,现在试试这个:

电源外壳 '

echo ErrorLevel是%errorlevel%

Powershell将失败(出错).这次,您还会看到" ErrorLevel为0 ".

我意识到这是一个不同的问题.Powershell甚至会说它是一个ParserError,这是因为我搞砸了命令行参数.不过,这并不酷.

我不清楚它为什么会这样.我猜这是一个疏忽.其他程序忽略了对失败设置错误级别,但在这种情况下,就好像它们中途走了一样.它甚至在这里设置为0,而不是根本不设置它.

windows powershell batch-file errorlevel

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

使用Gerrit进行Ruby on Rails数据库部署

我正在考虑将Ruby on Rails用于我的下一个项目.了解rails网站的部署很容易理解(听起来我会使用Phusion Passenger)

但现在我想弄清楚数据库.我看到很多关于"数据库迁移"的内容,它允许我使用ruby代码更新数据库.我也看到,我被允许同时创建向下这些迁移的变种.

但是,我只能理解它如何在一个方向上干净利落地工作.想象一下,如果我突然说"颜色列不能为空".因此,up将使其成为必需并为所有NULL条目提供默认值.但是下来会做什么?如果您关心它与它的启动方式相同,则不能将默认值设置回NULL.

这对于发布到生产来说并不重要.这将有可能只是在一个方向进行(在向上方向).但是,我想使用Gerrit进行代码审查以及在允许签入之前设置机器人来运行构建...

那怎么可能呢?从一个代码审查到下一个代码审查,构建服务器将检出新的代码集,并运行迁移?但是当发生这种情况时,它甚至都不会保留以前的迁移代码,那么它如何运行下行步骤呢?作为一个更简单的例子,我看不出如何查看旧版本的代码并向后"db migrate".

ruby database version-control ruby-on-rails

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

MVC3视图:使用精细处理空模型

我经常遇到项目中的视图抛出空引用异常的情况.

@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
Run Code Online (Sandbox Code Playgroud)

如果Modelnull,则抛出错误.

但人们如何处理这个?我当然没有看到代码样本到处都是丑陋的空检查乱丢了视图中的代码.这让我相信大多数时候,控制器不应该返回null模型.但是你怎么能用更精细的方式来强制执行呢?

现在,只要有人意外导致控制器返回空模型,视图模型就会爆炸并且看起来有问题.实际上,这是控制器的错.并且该视图甚至可能"捕获"该问题,只有在模型的成员碰巧被使用时才会这样做(当然,大多数时候都是这样).

由于各种原因,某些视图可能希望处理空值.不过,我不认为这是大多数情况.显然,这是在视图和控制器之间设置一些"契约"的问题.

我不喜欢我见过的选项:

  1. 每次使用时检查模型是否为空.非常蹩脚!
  2. 使用null模型检查包装整个视图的一个大if语句.想想浪费的代码房地产.瘸!
  3. 在顶部添加一个带有throwif检查.不错,但看起来很傻.轻度跛脚.

我很想知道是否存在类似这些选项来设置"无空"合同:

  • 控制器方法的属性,如[NoNullModels].我怀疑这是否存在,因为我不认为控制器知道它正在连接的视图.
  • 在视图中,像@ MVC3.HeyDontAllowNulls这样的指标或其他一些抛出异常的标准方法(如上面的选项3)

c# asp.net razor asp.net-mvc-3

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

在Azure存储模拟器中创建表会产生HTTP 500错误

我一直在尝试通过计算机的Azure存储模拟器创建表。我可以使用仅使用WindowsAzure.Storage nuget版本6.2.0的非常简单的程序来重新创建问题:

using Microsoft.WindowsAzure.Storage;

namespace StorageEmulatorTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var cloudStorageAccount = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
            var cloudTableClient = cloudStorageAccount.CreateCloudTableClient();
            cloudTableClient.GetTableReference("JohnnyTest").CreateIfNotExists();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

25秒后,Microsoft.WindowsAzure.Storage.StorageException仅此消息将引发type异常:

远程服务器返回错误:(500)Internal Server Error。

我尝试过:

  1. 确保我的WindowsAzure.Storage nuget软件包是最新版本(6.2.0)。
  2. 重新安装适用于VS2015 2.8.1的Azure SDK(并确保它是最新版本)
  3. 通过Azure存储模拟器命令行工具停止,清除,初始化Azure存储模拟器(似乎工作正常,没有错误)
  4. 通过异常的“ .InnerException.Response.GetResponseStream()”读取Web响应的流。此操作失败,并指出“流不可读”。
  5. 重新启动我的机器(无奈中)

我的花样少了。有人遇到过这个问题吗?

c# azure azure-storage-emulator

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