我可以通过以下方案表达我的需求:编写一个接受字符串的函数作为本机命令运行.
这并不是一个想法:如果你正在与公司其他地方的其他命令行实用程序连接,那么它将为你提供逐字运行的命令.因为您不控制命令,所以您需要接受任何有效的命令作为输入.这些是我无法轻易克服的主要问题:
该命令可能执行生活在其中包含空格的路径中的程序:
$command = '"C:\Program Files\TheProg\Runit.exe" Hello';
Run Code Online (Sandbox Code Playgroud)该命令可能包含带空格的参数:
$command = 'echo "hello world!"';
Run Code Online (Sandbox Code Playgroud)该命令可能包含单蜱和双蜱:
$command = "echo `"it`'s`"";
Run Code Online (Sandbox Code Playgroud)有没有干净的方法来完成这个?我只能设计出奢华和丑陋的变通方法,但对于脚本语言,我觉得这应该是简单的.
我很确定除了我发现的东西之外我没有任何其他选择,但我想选择集体的互联网大脑.
在将布尔值传递给自定义函数时,我更喜欢使用[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)
我还有其他技巧吗?
在命令提示符中,试试这个:
powershell aaa
echo ErrorLevel是%errorlevel%
Powershell将失败(出错).您还会看到" ErrorLevel为1 ".这是因为它将aaa作为脚本运行,这会产生未处理的错误,从而设置errorlevel.
但是,现在试试这个:
电源外壳 '
echo ErrorLevel是%errorlevel%
Powershell将失败(出错).这次,您还会看到" ErrorLevel为0 ".
我意识到这是一个不同的问题.Powershell甚至会说它是一个ParserError,这是因为我搞砸了命令行参数.不过,这并不酷.
我不清楚它为什么会这样.我猜这是一个疏忽.其他程序忽略了对失败设置错误级别,但在这种情况下,就好像它们中途走了一样.它甚至在这里设置为0,而不是根本不设置它.
我正在考虑将Ruby on Rails用于我的下一个项目.了解rails网站的部署很容易理解(听起来我会使用Phusion Passenger)
但现在我想弄清楚数据库.我看到很多关于"数据库迁移"的内容,它允许我使用ruby代码更新数据库.我也看到,我被允许同时创建了和向下这些迁移的变种.
但是,我只能理解它如何在一个方向上干净利落地工作.想象一下,如果我突然说"颜色列不能为空".因此,up将使其成为必需并为所有NULL条目提供默认值.但是下来会做什么?如果您关心它与它的启动方式相同,则不能将默认值设置回NULL.
这对于发布到生产来说并不重要.这将有可能只是在一个方向进行(在向上方向).但是,我想使用Gerrit进行代码审查以及在允许签入之前设置机器人来运行构建...
那怎么可能呢?从一个代码审查到下一个代码审查,构建服务器将检出新的代码集,并运行迁移?但是当发生这种情况时,它甚至都不会保留以前的迁移代码,那么它如何运行下行步骤呢?作为一个更简单的例子,我看不出如何查看旧版本的代码并向后"db migrate".
我经常遇到项目中的视图抛出空引用异常的情况.
@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
Run Code Online (Sandbox Code Playgroud)
如果Model为null,则抛出错误.
但人们如何处理这个?我当然没有看到代码样本到处都是丑陋的空检查乱丢了视图中的代码.这让我相信大多数时候,控制器不应该返回null模型.但是你怎么能用更精细的方式来强制执行呢?
现在,只要有人意外导致控制器返回空模型,视图模型就会爆炸并且看起来有问题.实际上,这是控制器的错.并且该视图甚至可能"捕获"该问题,只有在模型的成员碰巧被使用时才会这样做(当然,大多数时候都是这样).
由于各种原因,某些视图可能希望处理空值.不过,我不认为这是大多数情况.显然,这是在视图和控制器之间设置一些"契约"的问题.
我不喜欢我见过的选项:
我很想知道是否存在类似这些选项来设置"无空"合同:
我一直在尝试通过计算机的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。
我尝试过:
我的花样少了。有人遇到过这个问题吗?
powershell ×3
c# ×2
asp.net ×1
azure ×1
batch-file ×1
database ×1
errorlevel ×1
parameters ×1
razor ×1
ruby ×1
scripting ×1
windows ×1